2014-10-15 3 views
-2
parseInt(1.164 * 100000) === 116399 

Я знаю, что максимальное количество знаков после запятой - 5. Есть ли способ, чтобы удалить все ошибки округления?Преодоление Javascript Проблемы с плавающей точкой

EDIT: Я получаю несколько вниз голосов, так что я хотел бы прояснить этот вопрос немного более

  1. Я знаю, что максимальная десятичная 5, потому что я знаю, что это не возможно для базы данных, чтобы вернуться поплавок с более чем пятью знаками после запятой

  2. В данный момент нет ни одной ссылки. Это поплавок.

  3. Я не хочу использовать библиотеку точности, потому что она слишком тяжелая, чтобы включить библиотеку, чтобы исправить небольшую ошибку для переднего конца.

  4. Мне интересно, использую ли я Math.round, и у меня все еще будут проблемы. Например, ошибка здесь 1.164 становится 1.16399999 (поэтому я могу исправить проблему путем округления), но возможно ли для 1.164 стать 1.6400000001. В этом случае, если округлить, округлить до 116401.

+1

Откуда у вас возникла идея, что максимальное число десятичных знаков составляет 5? 15 намного чаще встречается. Например, в Chrome «1.23456789.14159265358979323846264338327950288419716939937510582097494459230 = 4.376160543713243'. –

+1

Вам нужно использовать parseFloat для получения точности –

+0

Кроме того, это слишком широкий вопрос. Там есть точные математические библиотеки, но, как сформулировано, этот вопрос слишком широк, чтобы получить хороший ответ здесь. –

ответ

0

Использование Math.round():

Math.round(1.164 * 100000) 

Это даст вам 116400.

0

Да, есть способы, чтобы удалить все «ошибки округления».

  1. Используйте другой язык.

  2. Как отметил комментатор, используйте библиотеку с фиксированной или высокой точностью.

  3. Использовать новую (несуществующую) реализацию JS, которая представляет числа по-другому, например предложение Crockford «DEC64»; см. https://github.com/douglascrockford/DEC64/.

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