Это обычное знание того, что (большинство) чисел с плавающей запятой точно не сохраняются (когда используется формат IEEE-754). Поэтому не стоит этого делать:
0.3 - 0.2 === 0.1; // very wrong
... поскольку это приведет к false
, если не используется какой-либо конкретный тип/класс произвольной точности (BigDecimal в Java/Ruby, BCMath в PHP, Math::BigInt/Math::BigFloat в Perl, чтобы назвать несколько).
Однако мне интересно, почему, когда вы пытаетесь напечатать результат этого выражения, 0.3 - 0.2
, языки сценариев (Perl и PHP) дают 0.1
, но "виртуальные машины" (Java, JavaScript и Erlang) дают нечто похожее на 0.09999999999999998
вместо?
И почему это также непоследовательно в Ruby? версия 1.8.6 (codepad) дает 0.1
, версия 1.9.3 (ideone) дает 0.0999...