-1
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

4

3 回答 3

0

我相信解决此问题的唯一方法是将逗号替换为空字符串。这应该工作

 val = 2,234.;
 var num = parseFloat(val.replace(',', '')).toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");

如果 val 已经是一个字符串,这应该是使用 jQuery 的最简洁的方法

于 2013-05-01T19:42:36.747 回答
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/

于 2013-05-01T19:40:11.643 回答
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"
于 2013-05-01T19:49:15.680 回答