Как округлить до двух десятичных с фиксированным (2) - PullRequest
0 голосов
/ 05 октября 2019

Часть моего кода имеет дело с математикой и суммированием. Большинство уравнений равняются трем десятичным знакам, но я хочу исправить это на 2. Я знаю, что использую tofixed (2), но, кажется, не имеет значения, куда я положил функцию, числа остаются на трех десятичных дробях. Я уверен, что совершаю глупую ошибку

  <script language="JavaScript">

      function SetFoodItems(amount) {
        // returns the amount in the .99 format
        return (amount == Math.floor(amount)) ? amount + '.00' : ((amount * 10 
   == Math.floor(amount * 10)) ? amount + '0' : amount);
      }

      function SelectFoodItems(form) {
        var UpdateCosts = (form.quantity.value - 0) * (form.unitcost.value - 
       0) + (form.quantity1.value - 0) * (form.unitcost1.value - 0) 
       (form.quantity2.value - 0) * (form.unitcost2.value - 0) + 
        (form.quantity3.value - 0) * (form.unitcost3.value - 0).toFixed(2);

        UpdateCosts = Math.floor((subtotal * 1000) / 1000).toFixed(2);
        form.subtotal.value = ('$' + cent(subtotal));

        var tax = (UpdateCosts / 100 * (form.rate.value - 0).toFixed(2);
        tax = Math.floor(tax * 1000) / 1000;
        form.tax.value = '$' + cent(tax);

        total = UpdateCosts + tax;
        total = Math.floor((total * 1000) / 1000);
        form.total.value = ('$' + cent(total)).toFixed(2);
      }



    </script>

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Ваша последняя строка:

form.total.value = ('$' + cent(total)).toFixed(2);

Его следует настроить на:

form.total.value = '$' + cent(total).toFixed(2);

Бит ('$' + cent(total)) преобразует сумму в строку, в которой нет метода toFixed.

Однако toFixed не округляет число, оно усекает (обрезая цифры, 2,005 станет «2,00», а не «2,01») и утверждает, что в новой строке будет ровно n цифр. Использование результата в дальнейших числовых операциях может вызвать проблемы (добавление числа к строке добавит).

Вы можете использовать функцию Math.round с умножением и делением для достижения округления, если это то, что вы на самом делепосле.

Здесь вы можете увидеть, как этого добиться: Как округлить до 1 знака после запятой в Javascript?

Или как функцию, которую вы можете использовать непосредственно в вашемcode:

function roundMoney(dollarAmount) {
    var cents = dollarAmount * 100;
    return Math.round(cents) / 100;
}

При окончательном отображении значения в form.value.total вам все еще нужно исправить, чтобы сохранить два десятичных знака в конце

0 голосов
/ 05 октября 2019

Это потому, что toFixed(2) возвращает 2-значное десятичное число в строке типа «2.25». Вам нужно parseFloat("2.25"), чтобы получить 2,25, прежде чем продолжить дальнейшие операции.

...