请帮忙。使用 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?在此先感谢您的帮助。
好吧,计算机不会像我们一样思考或存储数字。在计算机中有几种存储和访问浮点数的方法——称为数值分析;基本上如何近似浮点数。
使用Math.round(num)
而不是 int 强制转换。
您可以使用BigDecimal进行数学运算。
问题是双精度是基于二进制的并且精度有限。它们不能准确地表示2.01
或1.01
(或几乎所有实数)。这并不意味着它们没有用,通常我们不关心这样的小差异。如果你这样做,你将不得不使用其他东西(比如定点或 BigDecimal)