Математическая путаница с плавающей точкой - PullRequest
0 голосов
/ 11 ноября 2011

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

Вот пример.

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.

Любые идеи о том, как я могу сделать это правильно?

Ответы [ 5 ]

4 голосов
/ 11 ноября 2011

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

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

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

0 голосов
/ 11 ноября 2011

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

дает вам «25,5»

:)

0 голосов
/ 11 ноября 2011

попробуй OnSaleAT.toFixed(1)+'0':)

0 голосов
/ 11 ноября 2011

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

alert(OnSaleAT.toFixed(1));

Кроме этого, Роб W прав: математика выходит на 25.47, и с этим мало что можно поделать.

0 голосов
/ 11 ноября 2011
$(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));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...