请帮助。使用like double时我的计算错误。例如,我们使用以下代码:
double a = 2.01;
double b = 1.01;
double c = 100*(a - (int)a);
double d = 100*(b-(int)b);
在我的日志中,我看到以下内容:c = 1.0000001和d = 0.99999987。如何使计算得到更准确的结果,即0.01?在此先感谢您的帮助。
答案 0 :(得分:0)
使用Math.round(num)
代替int cast。
答案 1 :(得分:0)
您可以使用BigDecimal进行数学运算。
答案 2 :(得分:0)
问题是双打是基于二进制的并且精度有限。它们无法准确表示2.01
或1.01
(或almost all实数)。这并不意味着它们没用,通常我们不关心这样的小差异。如果你这样做,你将不得不使用其他东西(如固定点或BigDecimal)
答案 3 :(得分:0)
嗯,计算机不会像我们一样思考或存储数字。在计算机中存储和访问浮点数有几种方法 - 称为数值分析;基本上是如何近似浮点数。