интересно, почему используется битовая операция ИЛИ с 0

Когда я проверял какой-то код, я обнаружил промах в расчете битовой операции (|0).

Во-первых, мне интересно, есть ли какие-то особые причины, по которым '|0' используется после вычисления двух чисел, таких как (a*b)|0

Во-вторых, в приведенном ниже случае я ожидаю получить результат 220050, но результат 220049. Ребята, вы знаете, почему я получаю этот результат?

импортПакет(java.io); импортПакет(java.lang);

var a = 164.700;
var b = 1500;

var result = (a*b)|0;


System.out.println(result);

person Jun    schedule 16.06.2016    source источник
comment
Если вывод равен falsey, рассмотрим значение OR...   -  person Rayon    schedule 16.06.2016


Ответы (1)


|0 преобразует значение в 32-битное целое число, округляя его до нуля. результат умножения немного меньше целого числа, потому что числа хранятся внутри в двоичном формате, и вы не можете точно представить большинство дробных чисел в двоичном формате по той же причине, по которой 1/3 нельзя записать точно в десятичном виде с конечным числом. количество знаков после запятой. 164,7 получается как 164,69999999999998863131622783839702606201171875.

person programmerjake    schedule 16.06.2016