2016-06-16 10 views
0

コードをチェックすると、ビット操作(| 0)に関するミス計算が見つかりました。 「| 0」を0のORビット演算を使用する理由を放棄

まず、私は、なぜ特別な理由があるということだろう(* b)は同様に2つの数値を計算した後に使用| 0

を第二に、以下の場合には、私は結果を得ることを期待します220050ですが、結果は220049です。なぜあなたはこの結果を得るのか知っていますか?

importPackage(java.io); importPackage(java.lang);

var a = 164.700; 
var b = 1500; 

var result = (a*b)|0; 


System.out.println(result); 
+0

出力が 'falsey'の場合、' OR'値を考慮してください... – Rayon

答えて

1

|0はゼロに向かって丸めて32ビットの整数に値を変換します。数値が内部的にバイナリ形式で格納されているので、乗算の結果は整数よりわずかに少なくなります。同じ理由でほとんどの小数部をバイナリで正確に表すことはできません。1/3は、小数点以下の桁数。 164.7は164.699999999998863131622783839702606201171875となります。

関連する問題