猿问

如何避免Java中浮点数或双精度的浮点精度错误?

如何避免Java中浮点数或双精度的浮点精度错误?

我有一个非常恼人的问题,长数量的浮动或双倍在Java中。基本上,我的想法是,如果我执行:


for ( float value = 0.0f; value < 1.0f; value += 0.1f )

    System.out.println( value );

我得到的是:


0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.70000005

0.8000001

0.9000001

我知道有一个累积的浮动精度误差,但是,如何摆脱这一点?我试着用双倍来减少错误的一半,但结果仍然是一样的。


有什么想法吗?


呼啦一阵风
浏览 447回答 3
3回答

人到中年有点甜

您可以使用以下类来避免这个特定的问题BigDecimal.&nbsp;float和double作为ieee 754浮点,不是设计得非常精确,而是设计得更快。但请注意乔恩的观点如下:BigDecimal不能准确地表示“三分之一”double能准确表示“十分之一”。但是对于(比如说)财务计算,BigDecimal像这样的类往往是可行的,因为它们可以用我们人类看待它们的方式来表示数字。
随时随地看视频慕课网APP

相关分类

Java
我要回答