Ваша последняя строка:
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 вам все еще нужно исправить, чтобы сохранить два десятичных знака в конце