Задать вопрос

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

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


на всякий случай: windows XP, firefox 6
  • Вопрос задан
  • 2569 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 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, в сети примеров полно, не придумывайте велосипед.
Первая же ссылка в поиске выдает готовое решение — Тынц.
Ответ написан
Комментировать
Смотря на сколько важны данные вычисления.
Если это для вырисовывания статистики, построения диаграмм, то можно просто к примеру округлить — Самый простой способ.

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

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

Похожие вопросы