Я просмотрел бесчисленное количество тем здесь и в других местах более 2 дней, и я не могу заставить это работать должным образом.
У меня есть калькулятор, работающий именно так, как мне нужно, однако я не могу сделать последнюю вещь. Разделитель запятых тысячами с десятичным числом.
У меня есть десятичные разряды, но я не могу добавить запятые. Когда я добавляю запятые, я могу заставить одно или два поля работать до того, как вычисления прервутся или значение будет отображаться как NaN.
Вот рабочая страница: http://codepen.io/anon/pen/Fauzy.
В настоящее время он использует это:
function FormatAsMoney(mnt) {
mnt -= 0;
mnt = (Math.round(mnt*100))/100;
return (mnt == Math.floor(mnt)) ? mnt + '.00'
: ( (mnt*10 == Math.floor(mnt*10)) ?
mnt + '0' : mnt);
}
Если я попытаюсь использовать это:
function FormatAsMoney(x)
{
var money_value;
mnt = x.value;
mnt = mnt.replace(/\,/g,'');
mnt -= 0;
mnt = (Math.round(mnt*100))/100;
money_value = (mnt == Math.floor(mnt)) ? mnt + '.00' : ( (mnt*10 == Math.floor(mnt*10)) ? mnt + '0' : mnt);
if (isNaN(money_value))
{
money_value ="0.00";
}else{
money_value = CommaFormatted(money_value);
x.value = money_value.replace(".00", "");
}
}
Это вообще не работает.
Я сделал еще один тест, используя:
function FormatAsMoney(str) {
return (str + "").replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
return (b.charAt(0) > 0 && !(c || ".").lastIndexOf(".") ? b.replace(/(\d)(?=(\d{3})+$)/g, "$1,") : b) + c;
});
}
В котором я получаю форматирование запятой в первом поле, но теряю десятичные знаки и не продолжаю никаких других вычислений.
В качестве другого примера я создал еще одну функцию для добавления запятых, например:
function addCommas(nStr){
nStr += '';
c = nStr.split(','); // Split the result on commas
nStr = c.join(''); // Make it back to a string without the commas
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
Затем я использую его как:
document.Rate.RATE.value=addCommas(FormatAsMoney(dasum));
Это, кажется, лучший результат, который у меня был, однако в строке (163), где, например, function dosum()
зависит от многих операторов if, снова ломается. Кажется, я не могу заставить его работать для всех применимых полей, где значение будет исчисляться тысячами.
Мне нужно иметь возможность ввести «Страховую сумму» в верхней части 20 миллионов долларов «20000000» (в качестве примера, потому что она будет заполнять почти все возможные поля, которые будут иметь значения, разделенные запятыми, с десятичным знаком)
Может ли кто-нибудь положить конец моим страданиям? Спасибо за любую помощь.