输入字段在小数点后丢弃00

时间:2013-05-01 19:31:24

标签: jquery

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

3 个答案:

答案 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');
}

演示:http://jsfiddle.net/Guffa/KHjjh/

答案 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"