在 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位,被跳过
如果你想让你的算术更好,用double
或BigDecimal
代替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 的帮助下问的。
我有两个值
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位,被跳过
如果你想让你的算术更好,用double
或BigDecimal
代替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 的帮助下问的。