在应用程序中,我的工作的一些数字让转换和长(18位)保存到浮动/双。 这些数字就像参考/身份证的,但不能用于计算。 最近我注意到,在数据有一些出入被存储为浮点/双精度。 我想了解,如果行为是由于什么浮点数调用显著数字,也许是因为同样的一个简单的解释。
我基于以下程序的问题是
- 输出NO:5显示了一个非常大的数字(小数点前39位)作为浮动的最大值。 那么,为什么浮动不能显示上述7位准确任何东西。 正是由于IS只支持6-7显著数字。
- 输出NO:10显示了一个非常大的数量的双最大值。 为什么然后双击无法显示上述16位准确东西。 正是由于IS只支持15位显著。
- 什么是显著数字的真正含义? 这是否意味着任何数字后,这个数字将无法准确不论谈到之前或之后小数点代表?
注:我对这个课题的研究之后,我现在明白了,浮点数是由它们的性质不准确,不应该被用来表示需要精确表述的东西。 不过我觉得有点困惑上述行为和显著数字。
public class Main
{
public static void main(String[] args) {
System.out.printf( "1. Float value of 50000000115 is : %,f. Expected output was 50000000115.000000 \n", 50000000115f );
System.out.printf( "2. Float value of 50000000116 is : %,f. Expected output was 50000000116.000000 \n", 50000000116f );
System.out.printf( "3. Float value of 50000000117 is : %,f. Expected output was 50000000117.000000 \n\n", 50000000117f );
System.out.printf( "4. Float value of 2175863596593954381 is : %,f. Expected output was 2175863596593954381.000000 \n\n", 2175863596593954381f );
System.out.printf( "5. Float.MAX_VALUE: %,f\n\n", Float.MAX_VALUE );
System.out.printf( "6. Double value of 50000000115 is : %,f\n", 50000000115d );
System.out.printf( "7. Double value of 50000000116 is : %,f\n", 50000000116d );
System.out.printf( "8. Double value of 50000000117 is : %,f\n\n", 50000000117d );
System.out.printf( "9. Double value of 2175863596593954381 is : %,f. Expected output was 2175863596593954381.000000 \n\n", 2175863596593954381d );
System.out.printf( "10. Double.MAX_VALUE: %,f\n\n", Double.MAX_VALUE );
System.out.printf( "11. Float value of number gives expected result till 7 digits ie 12345678 is : %,f\n", 12345678f );
System.out.printf( "12. Float value of number gives expected result till 7 digits ie 11111111 is : %,f\n", 11111111f );
System.out.printf( "13. Double value of number gives expected result till 16 digits ie 1122334455667788 is : %,f\n", 1122334455667788d );
System.out.printf( "14. Double value of number gives expected result till 16 digits ie 1111222233334444 is : %,f\n", 1111222233334444d );
}
}
上述程序的输出
- 的浮动50000000115值为:49,999,998,976.000000。 预计产量为50000000115.000000
- 的浮动50000000116值为:49,999,998,976.000000。 预计产量为50000000116.000000
的浮动50000000117值为:49,999,998,976.000000。 预计产量为50000000117.000000
的浮动2175863596593954381值为:2,175,863,554,941,386,750.000000。 预计产量为000 2175863596593954381.000
Float.MAX_VALUE:340,282,346,638,528,860,000,000,000,000,000,000,000.000000
的50000000115双重价值:50,000,000,115.000000
- 的50000000116双重价值:50,000,000,116.000000
的50000000117双重价值:50,000,000,117.000000
的2175863596593954381双重价值:2,175,863,596,593,954,300.000000。 预计产量为00000 2175863596593954381.0
Double.MAX_VALUE:179,769,313,486,231,570,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.000000
一些浮点值给出了预期的结果,直到7位,即12345678是:12,345,678.000000
- 一些浮点值给出了预期的结果,直到7位,即11111111是:11,111,111.000000
- 一些双值给出了预期的结果,直到16个数字,即1122334455667788是:1,122,334,455,667,788.000000
- 一些双值给出了预期的结果,直到16个数字,即1111222233334444是:1,111,222,233,334,444.000000