val = "2.";
var num = parseFloat(val).toFixed(2);
我正在使用parseFloat将字符串转换为数字。然后我使用toFixed(2)来确保在小数点后添加2个零。我的问题是如果val
有一个逗号,这就搞砸了。
示例:
val = "2,234.";
var num = parseFloat(val).toFixed(2);
输出为2.00
。
如何添加00
并且不要替换逗号?
Val是一个字符串,开始抱歉混淆。它应该最终输出2,234.00 并且第一个val应该输出2.00
答案 0 :(得分:0)
有两个可能的原因,取决于您的代码实际是什么,两者都给出了相同的结果。
如果代码与问题完全相同,即:
val = 2,234.;
然后你使用逗号运算符,它接受两个操作数,计算两者,然后返回第二个操作数的值。将2
赋值给变量val
是第一个操作数,值234.
是第二个操作数。分配发生,然后评估234.
,由逗号运算符返回,并丢弃。代码评估为:
(val = 2) , (234.);
如果是字符串值,即:
val = "2,234.";
那么原因是parseFloat
函数只能尽可能地解析字符,并且逗号不是数字格式的一部分,所以它停在那里并返回2
。
要解析字符串,您必须删除逗号,解析它,然后将逗号放回:
var s = parseFloat(val.replace(/,/g,'')).toFixed(2);
while (/\d{4}/.test(s)) {
s = s.replace(/(\d{3}[,.])/,',$1');
}
答案 1 :(得分:0)
我相信解决这个问题的唯一方法是用空字符串替换逗号。这应该工作
val = 2,234.;
var num = parseFloat(val.replace(',', '')).toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
如果val已经是一个字符串,这应该是使用jQuery
执行它的最简洁的方法答案 2 :(得分:0)
假设您正在使用字符串。
正如Guffa所说,parseFloat一旦碰到逗号就行不通......所以我们只是将它们剥离出来......
var val = '2,234.';
val = val.replace(',', '') // remove commas
var num = parseFloat(val).toFixed(2); // 2234.00
现在我们需要把逗号放回去。感谢堆栈溢出的另一个答案:
// http://stackoverflow.com/questions/6392102/add-commas-to-javascript-output
var addCommas = function(nStr) {
nStr += '';
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;
};
num = addCommas(num); // "2,234.00"