我要求将十进制值格式化为美元格式(即每个十进制数字应在开头附加$符号并在每3位数后引入逗号。
例如:999999999应转换为$ 999,999,999.00用于显示目的,而原始值应保留原样用于进一步计算。
self.MonthlyAppliedEmployerContributionAmount = ko.observable(MonthlyAppliedEmployerContribution);
self.MonthlyAppliedEmployerContributionAmountFormatted = ko.computed({
read: function () {
return '$' + parseFloat(self.MonthlyAppliedEmployerContributionAmount()).toFixed(2);
},
write: function (value) {
// Strip out unwanted characters, parse as float, then write the raw data back to the underlying "price" observable
value = parseFloat(value.replace(/[^\.\d]/g, ""));
self.MonthlyAppliedEmployerContributionAmount(isNaN(value) ? 0 : value); // Write to underlying storage
}
});
在阅读可观察的财产时,我在开头追加$& .toFixed(2)帮助我实现了限制2位小数。
但我不确定如何在每三位数之后引入逗号。
注意:在KO写入方法中,我将删除读取方法中引入的所有格式。
我不想使用Jquery掩码插件,因为它们大部分都不是直接来自Jquery lib,而是由某些第三方制作,可能会在某个时间点破坏。
欣赏早期回应。
答案 0 :(得分:1)
您可以使用此正则表达式插入千位分隔符:
function addThousandSeparator(s) {
return s.replace(/(\d)(?:(?=\d+(?=[^\d.]))(?=(?:\d{3})+\b)|(?=\d+(?=\.))(?=(?:\d{3})+(?=\.)))/gm, '$1,');
}
如果您需要另外一千个分隔符,请将'$1,'
中的逗号替换为分隔符。
所以你会:
read: function () {
return '$' + addThousandSeparator(parseFloat(self.MonthlyAppliedEmployerContributionAmount())
.toFixed(2));
}
答案 1 :(得分:0)