문제

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

도움이 되었습니까?

해결책 3

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() );

다른 팁

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top