所以我的BigDecimal持有價值0.99和我調用:Java:爲什麼相同浮點值的十六進制值不同?
- Float.toHexString(rationalNumber.floatValue())我得到0x1.fae148p-1
- Double.toHexString(rationalNumber.doubleValue() )我得到0x1.fae147ae147aep-1
我想因爲我們是代表像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
非常感謝埃裏克,你可以請讀這個問題[http://stackoverflow.com/questions/19590878/java-double-in-place-of-float],看看我的編輯,請讓我知道,如果你同意發現。非常感謝。 – jakstack