Как избежать проблем со странными десятичными вычислениями в JavaScript

Я только что прочитал в MDN , что одна из причуд JS обработки чисел из-за того, что все «Значения IEEE 754 в 64-битном формате двойной точности» заключаются в том, что когда вы делаете что-то вроде .2 + .1 , вы получаете 0,30000000000000004 (это то, что написано в статье, но Я получаю 0,29999999999999993 в Firefox). Следовательно:

(.2 + .1) * 10 == 3

оценивается как false .

Это кажется очень проблематичным. Итак, что можно сделать, чтобы избежать ошибок из-за неточных десятичных вычислений в JS?

Я заметил, что если вы сделаете 1.2 + 1.1 , вы получите правильный ответ. Так следует ли вам просто избегать любых математических расчетов, в которых используются значения меньше 1? Потому что это кажется очень непрактичным. Есть ли какие-либо другие опасности при выполнении математических операций в JS?

Изменить:
Я понимаю, что многие десятичные дроби не могут быть сохранены как двоичные, но то, как большинство других языков, с которыми я сталкивался, похоже, справляется с ошибкой ( например, JS обрабатывает числа больше 1) кажется более интуитивным, поэтому я не привык к этому, поэтому я хочу посмотреть, как другие программисты справляются с этими вычислениями.

32
задан Lèse majesté 18 February 2011 в 05:39
поделиться