그래서 내가 BigDecimal의 값 0.99을 잡고 내가 호출이 :자바 : 동일한 부동 소수점 값에 대한 16 진수 값이 다른 이유는 무엇입니까?
- Float.toHexString (rationalNumber.floatValue()) 내가 0x1.fae148p-1
- Double.toHexString (rationalNumber.doubleValue를 얻을 수()) 내가 얻을 0x1.fae147ae147aep-1 우리는 우리가 관계없이 동일한 16 진수 값을 받아야 0.99 같은 작은 수를 나타내는 때문에 내가 생각하고
. 동의하다?
코드 (실패 시험) :
@Test public void testDelta() {
BigDecimal rationalNumber = new BigDecimal("0.99").setScale(2,BigDecimal.ROUND_DOWN);
String hexFromFloat = Float.toHexString(rationalNumber.floatValue());
String hexFromDouble = Double.toHexString(rationalNumber.doubleValue());
String hexFromFloatMsg = rationalNumber.floatValue() + " = " + hexFromFloat;
String hexFromDoubleMsg = rationalNumber.doubleValue() + " = " + hexFromDouble;
Assert.assertEquals(hexFromFloatMsg + ", " + hexFromDoubleMsg, hexFromDouble, hexFromFloat);
}
출력 :
org.junit.ComparisonFailure: 0.99 = 0x1.fae148p-1, 0.99 = 0x1.fae147ae147aep-1
Expected :0x1.fae147ae147aep-1
Actual :0x1.fae148p-1
우리는 우리가 관계없이 동일한 16 진수 값을 받아야 0.99 같은 작은 수를 나타내는 때문에
많은 감사의 말씀 Eric,이 질문 [http://stackoverflow.com/questions/19590878/java-double-in-place-of-float]을 읽고 제 편집을보고 제게 알려주십시오. 발견. 다시 많은 감사드립니다. – jakstack