In Java, the division of integer values (long in this case) follows integer arithmetic rules, which result in whole numbers. When dividing whole numbers, the result is rounded towards negative infinity. This can lead to unexpected results, especially when trying to calculate percentages.
To address this, you need to convert at least one of the input integers to a double (floating-point number) before performing the division. This coerces the division to floating-point arithmetic, producing a decimal result.
double completed = 25000; double total = 50000; double percentage = completed / total; // Prints 0.5 System.out.println(percentage); // Prints 0.5
By casting one of the inputs to double, the division result becomes a double as well, providing the expected percentage value.
It's important to note that converting the result, as you initially attempted (completed/total), is not sufficient. The integer division has already occurred at that point. Converting the inputs ensures proper floating-point arithmetic is used from the start.
The above is the detailed content of Why Does Integer Division in Java Produce Unexpected Results When Calculating Percentages?. For more information, please follow other related articles on the PHP Chinese website!