Javacript: 0.03x30.00 = 0.899999. Почему? И как правильно умножить эти числа?

x = 0.03*30.00;
alert(x); // 0.89999999


на всякий случай: windows XP, firefox 6
  • Вопрос задан
  • 2549 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 5
JetMaster
@JetMaster Автор вопроса
на stackoverflow нашёл костыль

function multFloats(a,b){
  var atens = Math.pow(10,String(a).length - String(a).indexOf('.') - 1), 
      btens = Math.pow(10,String(b).length - String(b).indexOf('.') - 1); 
  var result = (a * atens) * (b * btens) / (atens * btens); 
  return result;
}
Ответ написан
@korvindest
Это связано с ошибкой вычислений с плавающей точкой.
Что бы избежать этого можно сначала провести все вычисления с целыми числами, а потом разделить до нужного порядка.

Например: x = (3*30.00)/100; alert(x);
Ответ написан
gaelpa
@gaelpa
Если вам нужно работать именно с рациональными дробями, то можно подыскать подходящую библиотеку под это дело. Я нашел вот это, если кто-нибудь укажет более развитую и популярную, буду благодарен.
Ответ написан
Damaskus
@Damaskus
Поищите аналог функции sprintf для JS, в сети примеров полно, не придумывайте велосипед.
Первая же ссылка в поиске выдает готовое решение — Тынц.
Ответ написан
Смотря на сколько важны данные вычисления.
Если это для вырисовывания статистики, построения диаграмм, то можно просто к примеру округлить — Самый простой способ.

Или же как было сказано выше, построить функцию, которая будет вычислять поэтапно каждую операцию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы