Это связано с тем, что двоичная плавающая точка не очень хорошо преобразуется в десятичное представление. Предполагая, что 64 бит IEEE754 плавающей точкой:
Ближайший число с плавающей точкой 0.1 является 0,1000000000000000055511151231257827021181583404541015625
Ближайший число с плавающей точкой до 10,1 является 10,0999999999999996447286321199499070644378662109375
Вы можете увидеть, что десятичные части существенно различаются, поэтому точное сравнение неизбежно завершится неудачей.
Трудно предложить средство правовой защиты здесь, поскольку оно очень зависит от вашего конкретного случая использования. (Инстинкт подсказывает мне, что вы можете сравнить с аддитивной толерантностью 1е-13).
В качестве дополнения к этому вы можете округлить до 1 десятичного знака, чтобы избежать этого неравенства. «0.1 %% 1 == round (10.1 %% 1, 1)» TRUE. –
'all.equal' также покажет их как равные. –