java中双精度乘法的准确性?

时间:2011-06-23 19:06:33

标签: java floating-point multiplication double-precision

java中double值的乘法运算符的保证精度是多少?

例如,2.2 * 100是220.00000000000003,但220是双数。 220.00000000000003是继220之后的下一个双倍。

3 个答案:

答案 0 :(得分:6)

乘法工作正常,但2.2不能完全表示为double。最接近的双打是:

  • 2.199999999999999733(0x4001999999999999)
  • 2.200000000000000177(0x400199999999999a)

某些软件会将后一个值打印为2.2,但这并不意味着它是准确的。这只是意味着它被视为“足够接近”。

答案 1 :(得分:3)

如果您正在使用财务数据,请不要使用float or double,只需使用 java.math.BigDecimal

答案 2 :(得分:1)

您可以使用BigDecimal,但请确保使用 BigDecimal(String)的构造而不是 BigDecimal(double)。他们之间的区别是:

enter image description here