Закръгляване до два знака след десетичната запетая - не намиране на правилната формула

Изглежда не мога да намеря правилната формула за два знака след десетичната запетая в моя код. В момента се закръгля до три знака след десетичната запетая, когато щракна върху първата опция по отношение на изчисленията (не че 3 знака след десетичната запетая означават нещо. Но независимо от резултата, трябва да се закръгли до 2 знака след десетичната запетая). Това е последният ми опит:

$('#a_is_valid').one('click', function(){
    if ($('#code_promo').val() == 'promocode')
        {$('#gtotal').val($('#gtotal').val()-($('#gtotal').val()-        
            (($('#gtotal').val()*.75)))).fixed(2);

    }
})

person Kung Fu Front Ender    schedule 25.11.2013    source източник
comment
jQuery няма вграден метод .fixed() и изглежда, че Google показва, че плъгините, които използват този метод, са за позициониране на неща на страница, а не за посочване на десетична точка (математика).   -  person Crayon Violent    schedule 25.11.2013
comment
Не знам за това, защото без него получавам 39 вместо 39.00.   -  person Kung Fu Front Ender    schedule 25.11.2013


Отговори (1)


Дадено е число (или низ, представляващ число), защо просто не направите това:

var number;
var output = (Math.round(number * 100) / 100).toFixed(2);

Във вашия случай изглежда, че искате:

$('#a_is_valid').one('click', function(){
     if ($('#code_promo').val() == 'promocode')
        {$('#gtotal').val((Math.round($('#gtotal').val() * 75) / 100).toFixed(2));

Math.round (достатъчно подходящо) закръгля до най-близкото цяло число, така че ще трябва да направите малко магия. Умножете по 10^(брой десетични знаци, който искате) - във вашия случай 10^2 или 100, закръглете и след това разделете на същото число.

В примера, който направих специално за вас, ще забележите, че умножавам по 75: 0,75 * 100.

Може да е най-лесно да видите това с помощта на функция:

function roundToNPlaces(n, val) {
    var multiplier = Math.pow(10, n);
    return (Math.round(val * multiplier) / multiplier).toFixed(n);
}

Тогава можете просто да зададете gtotal както следва:

$('#gtotal').val(roundToNPlaces(2, $('gtotal').val() * 0.75));

Вижте този FIDDLE.

Вижте:

  • Math.round ЗАБЕЛЕЖКА: Тази документация предоставя изпълнение, подобно на (но по-сложно от) кода, който дадох. Ако копирате целия им пример Decimal rounding във вашия код (преди първия път, когато трябва да го използвате), тогава можете просто да използвате Math.round10($('#gtotal').val() * .75, -2);. Вижте http://jsfiddle.net/aW44n/1/
  • toFixed
person Scott Mermelstein    schedule 25.11.2013
comment
Това работи добре. Въпреки че вместо да се закръгли до 38,81 (поради 38,805), той закръгля до 39,00. Мислех, че math.round ще закръгли два знака след десетичната запетая, без да закръгли всичко? - person Kung Fu Front Ender; 25.11.2013
comment
@KungFuFrontEnder Ах. Не се бях сетила за това. Чакай, нека направя редакция. - person Scott Mermelstein; 25.11.2013
comment
@KungFuFrontEnder Вижте моята редакция, това трябва да е това, от което се нуждаете. - person Scott Mermelstein; 25.11.2013
comment
Страхотна редакция. Ще го спася този! :D Направих тази моя математика преди време и ми отне цяла вечност хаха. Кълна се, че използването на JS в тази форма за изчисления може да бъде пагубно. Браво както за редакцията, така и за допълнителното обяснение Скот. Добре е обяснено :) Благодаря за линковете. Между другото, всъщност трябва ли math.round10 да работи на тази връзка? Бях опитвал това преди, но щеше да разбие кода. - person Kung Fu Front Ender; 25.11.2013
comment
@KungFuFrontEnder Ще трябва да копирате целия този втори пример от MDN и да го поставите като скрипт във вашата страница, преди да го извикате, но тогава да, трябва да можете да направите Math.round10(38.805, -2). Вижте го - person Scott Mermelstein; 26.11.2013