Математическая путаница с плавающей запятой

#javascript #math

#javascript #математика

Вопрос:

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

Вот пример.

 var RegPrice = 8.95;
var OnSale = 6.67;
var OnSaleAT =  Math.abs(Math.max(100.00 - OnSale / RegPrice * 100.00));
alert(OnSaleAT.toFixed(2));
  

То, что я пытаюсь получить, это alert(); вернуть значение 25.50 . Тем не менее, я получаю 25.47 .

Есть идеи о том, как я могу это исправить?

Комментарии:

1. Вам не нужен jQuery для базовых арифметических операций. Кроме того, скидка на 25.47% верна.

2. какое это имеет отношение к jQuery, jQuery — это не javascript

3. 6.67 / 8.95 = 0.74525 100 - 74.525 = 25.475 , исправить на 2 десятичных знака — это 25.47 . Если вы хотите округлить , вам нужно использовать Math.round() .

Ответ №1:

25.47486 … является правильным ответом. Если вы пытаетесь округлить до ближайших десятых, вы можете использовать:

 var result = Math.round(OnSaleAT * 10) / 10;
  

Который выводит: 25.5 и оттуда вы можете форматировать свой ответ так, как вам нравится.

Комментарии:

1. Я бы также использовал этот код. Этот код должен быть добавлен после var OnSaleAT . Предупреждение будет выглядеть следующим образом: alert(result,toFixed(2)); .

2. Спасибо, это то, что я пытался получить.

Ответ №2:

 $(window).load(function() {

    var RegPrice = 8.95;
    var OnSale = 6.67;
    var OnSaleAT = Math.round(Math.abs(Math.max(100.00 - 6.67 / 8.95 * 100.00)) * 10.00) / 10.00

    alert(OnSaleAT.toFixed(2));
});
  

Ответ №3:

Если вы пытаетесь округлить до 25,5%, вы можете просто предупредить с помощью фиксированного параметра 1 вместо 2:

 alert(OnSaleAT.toFixed(1));
  

В остальном, Роб В прав … математика действительно выходит равной 25.47, и вы мало что можете с этим поделать.

Ответ №4:

попробуйте OnSaleAT.toFixed(1) '0' 🙂

Ответ №5:

Math.ceil(1000* (1 — OnSale / RegPrice))/10

даю вам «25.5»

🙂