0

当我检查一些代码时,我发现了一个关于位操作(|0)的未命中计算。

首先,我想知道在计算两个像 (a*b)|0 这样的数字之后使用 '|0' 有什么特殊原因

其次,在下面的例子中,我期望得到的结果是 220050,但结果是 220049。你们知道我为什么会得到这个结果吗?

导入包(java.io);导入包(java.lang);

var a = 164.700;
var b = 1500;

var result = (a*b)|0;


System.out.println(result);
4

1 回答 1

1

通过向零舍入|0将值转换为 32 位整数。乘法的结果略小于整数,因为数字在内部以二进制形式存储,并且由于同样的原因,您不能用二进制精确表示大多数小数,1/3 不能用有限的十进制精确写入小数点后的位数。164.7 的输出为 164.69999999999998863131622783839702606201171875。

于 2016-06-16T06:17:15.607 回答