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

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


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

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

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

Войти через центр авторизации
Похожие вопросы
24 апр. 2024, в 13:10
400000 руб./за проект
24 апр. 2024, в 13:01
5000 руб./за проект
24 апр. 2024, в 13:00
3000 руб./за проект