2016-06-16 3 views
0

Когда я проверяю код, я нашел расчет промаха относительно операции бит (| 0)., блуждающий по причине использования операции бит ИЛИ с 0

Во-первых, интересно, что есть какие-то особые причины, почему «| 0» используется после вычисления два числа типа (A * B) | 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.69999999999998863131622783839702606201171875.

Смежные вопросы