org.jscience.mathematics.number.FloatingPoint initialValue = org.jscience.mathematics.number.FloatingPoint.valueOf("145.123456789");
org.jscience.mathematics.number.FloatingPoint divideWith = org.jscience.mathematics.number.FloatingPoint.valueOf("3");
org.jscience.mathematics.number.FloatingPoint result = initialValue.divide(divideWith);
System.out.println(result.doubleValue() );
org.jscience.mathematics.number.FloatingPoint finalResult = result.times(divideWith);
System.out.println(finalResult.doubleValue() );
How to get the exact value after multiplying and dividing a BigDecimal in java
-
23-07-2023 - |
Question
import java.math.*;
public class Test{
public static void main(String args[]){
BigDecimal initialValue = BigDecimal.valueOf(193);
BigDecimal divider = BigDecimal.valueOf(3);
BigDecimal result = initialValue.divide(divider, 2, RoundingMode.HALF_UP);
System.out.println(initialValue + " / " + divider+" = "+result);
BigDecimal retriveInitialValue = result.multiply(divider);
System.out.println(result + " * " + divider+" = "+retriveInitialValue);
}
}
Output i am getting
193 / 3 = 64.33
64.33 * 3 = 192.99
What i Expect 193 / 3 = 64.33
64.33 * 3 = 193
La solution 3
Autres conseils
You cannot get this result, until you implement some class
Rational, which will contain numerator and denominator. Every calculation is made with some precision. Also, you may round it to get the close integer.
Change this line:
BigDecimal retriveInitialValue = result.multiply(divider);
... to ...
BigDecimal retriveInitialValue = result.multiply(divider).setScale(0, RoundingMode.HALF_UP);
Output
64.33 * 3 = 193
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow