0

请帮忙。使用 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?在此先感谢您的帮助。

4

4 回答 4

0

好吧,计算机不会像我们一样思考或存储数字。在计算机中有几种存储和访问浮点数的方法——称为数值分析;基本上如何近似浮点数。

https://en.wikipedia.org/wiki/Numerical_analysis

于 2013-04-20T14:21:56.513 回答
0

使用Math.round(num)而不是 int 强制转换。

于 2013-04-20T14:10:47.207 回答
0

您可以使用BigDecimal进行数学运算。

于 2013-04-20T14:12:47.380 回答
0

问题是双精度是基于二进制的并且精度有限。它们不能准确地表示2.011.01(或几乎所有实数)。这并不意味着它们没有用,通常我们不关心这样的小差异。如果你这样做,你将不得不使用其他东西(比如定点或 BigDecimal)

于 2013-04-20T14:19:34.380 回答