したがって、値 0.99 を保持する BigDecimal があり、次のように呼び出します。
- Float.toHexString(rationalNumber.floatValue()) 0x1.fae148p-1を取得します
- Double.toHexString(rationalNumber.doubleValue()) 0x1.fae147ae147aep-1を取得します
0.99 のような小さな数値を表しているので、関係なく同じ 16 進数値を取得する必要があると考えています。同意?
コード (テストの失敗):
@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