在 java 中添加浮点值的问题

Issue with adding Float values In java

我有两个值

5042034.0 
1425837.2

当我像下面这样添加时

float abc = (float) (5042034.0 + 1425837.2);

我期待 6467871.2

的结果

但我得到 6467871.0

如何借助 float 获得 6467871.2

我试过

 float c = (float) (1.1 + 2.2) ;

我得到了一个结果:3.3

这背后的原因是什么?

Java 使用支持 6-7 位有效小数位的 IEEE 754 标准。你的加法结果超出了范围限制,所以你得到这样的结果。

浮点数是 IEEE 754 32 位数字。

5042034.0 超过 2^22。这意味着,它填充了最大的 23 位尾数。它实际上跳过了尾随的 0。 当您尝试将它添加到 1425837.2 时,它会调整两个数字:

 10011001110111101110010.00
+  101011100000110101101.0011001100110011001101....
 --------------------------
 11000101011000100011111.0

在二进制系统中。表示.0.2超出22位,被跳过

如果你想让你的算术更好,用doubleBigDecimal代替float:

double result = 5042034.0d + 1425837.2d;
BigDecimal bd = BigDecimal.valueOf(5042034.0d + 1425837.2d);

试试 double

double abc = (double) (5042034.0 + 1425837.2);

要支持@xenteros 回答,请使用BigDecimal

BigDecimal abc = BigDecimal.valueOf(5042034.0 + 1425837.2);
System.out.println(abc);

将导致 6467871.2

更好的是,使用 double 这是原始的:

double abc = (double) (5042034.0 + 1425837.2);
System.out.println(abc);

N.B: 只是想贡献这个,我知道 OP 是在 float 的帮助下问的。