Ubuntu устанавливается на Chromebook ARM (Samsung) [копия]

ПРИМЕЧАНИЕ. - См. Редактирование 4, если важна трехзначная точность.

var discount = (price / listprice).toFixed(2);

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

Пример: http://jsfiddle.net/calder12/tv9HY/

Документация: https://developer.mozilla.org/en-US/docs/ Web / JavaScript / Reference / Global_Objects / Number / toFixed

Редактировать - Как упоминалось другими, это преобразует результат в строку. Чтобы избежать этого:

var discount = +((price / listprice).toFixed(2));

Редактировать 2 - Как также упоминалось в комментариях, эта функция не работает с некоторой точностью, например, в случае 1,005 она вернет 1,00 вместо 1,01. Если важна точность в этой степени, я нашел ответ: https://stackoverflow.com/a/32605063/1726511 Кажется, что он хорошо работает со всеми тестами, которые я пробовал.

Однако требуется одно небольшое изменение: функция в ответе, связанном выше, возвращает целые числа, когда округляет до единицы, поэтому, например, 99.004 вернет 99 вместо 99.00, что не идеально для отображения цен.

Редактировать 3 - Похоже, что toFixed на фактическом возврате все еще испортил некоторые числа, это окончательное редактирование работает. Черт возьми, так много переделок!

   var discount = roundTo((price / listprice), 2);

   function roundTo(n, digits) {
     if (digits === undefined) {
       digits = 0;
     }

     var multiplicator = Math.pow(10, digits);
     n = parseFloat((n * multiplicator).toFixed(11));
     var test =(Math.round(n) / multiplicator);
     return +(test.toFixed(digits));
   }

См. Пример Fiddle здесь: https://jsfiddle.net/calder12/3Lbhfy5s/

Редактировать 4 - Вы, ребята, убиваете меня. Редактировать 3 не удается на отрицательных числах, не разбираясь в том, почему просто проще справиться с превращением отрицательного числа в положительное, прежде чем выполнять округление, а затем повернуть его обратно, прежде чем вернуть результат.

function roundTo(n, digits) {
    var negative = false;
    if (digits === undefined) {
        digits = 0;
    }
        if( n < 0) {
        negative = true;
      n = n * -1;
    }
    var multiplicator = Math.pow(10, digits);
    n = parseFloat((n * multiplicator).toFixed(11));
    n = (Math.round(n) / multiplicator).toFixed(2);
    if( negative ) {    
        n = (n * -1).toFixed(2);
    }
    return n;
}

Скрипка: https://jsfiddle.net/3Lbhfy5s/79/

0
задан 04.05.2020, 22:58

1 ответ

Просто введите свой пароль, который не появится, и нажмите Enter .

0
ответ дан 04.05.2020, 22:58

Теги

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