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

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

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

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

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

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

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

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

在此处输入图像描述