38

这将是一种很好的处理方式吗?

我已经考虑过删除逗号然后解析为浮动。

你知道更好/更清洁的方法吗?

谢谢

4

7 回答 7

83
parseFloat( theString.replace(/,/g,'') );
于 2010-07-08T16:17:40.647 回答
17

我不知道为什么没有人建议这个表达-

parseFloat( theString.replace(/[^\d\.]/g,'') );

删除除句点以外的所有非数字字符。您也不需要自定义函数/循环,这只是矫枉过正。

于 2016-01-30T17:26:22.450 回答
13

没有。去掉逗号。

于 2010-07-08T16:15:35.097 回答
6

您可以使用字符串替换方法,但不能像正则表达式允许的那样在单行中使用。

while(str.indexOf(',')!=-1)str= str.replace(',','');
parseFloat(str);

或者制作一个没有 regexp= 的表达式

return parseFloat(str.split(',').join(''));

我会使用正则表达式。

于 2010-07-08T18:05:03.097 回答
4

我没有足够的声誉来添加评论,但对于任何想知道正则表达式与拆分/加入性能的人来说,这里有一个快速的小提琴:https ://jsfiddle.net/uh3mmgru/

var test = "1,123,214.19";

var t0 = performance.now();
for (var i = 0; i < 1000000; i++)
{
    var a = parseFloat(test.replace(/,/g,''));
}
var t1 = performance.now();
document.write('Regex took: ' + (t1 - t0) + ' ms');
document.write('<br>')

var t0 = performance.now();
for (var i = 0; i < 1000000; i++)
{
    var b = parseFloat(test.split(',').join(''));
}
var t1 = performance.now();
document.write('Split/join took: ' + (t1 - t0) + ' ms');

我得到的结果是(每个循环 100 万次):

正则表达式:263.335 毫秒
拆分/加入:1035.875 毫秒

所以我认为可以肯定地说正则表达式是在这种情况下要走的路

于 2016-02-22T21:36:04.583 回答
0

基于@kennebec 的想法,如果你想确保逗号是正确的,并且你不想替换逗号,你可以尝试这样的事情:

function myParse(num) {
  var n2 = num.split(",")
  out = 0
  for(var i = 0; i < n2.length; i++) {
    out *= 1000;
    out += parseFloat(n2[i])
  }
  return out
}
alert(myParse("1,432,85"));
// Returns 1432085, as the comma is misplaced.

它可能没有那么快,但你想要替代品:)

于 2010-07-08T18:36:28.500 回答
0

解决大多数常见问题的简单功能怎么样?

function getValue(obj) {
  Value = parseFloat( $(obj).val().replace(/,/g,'') ).toFixed(2);
  return +Value;
}

上面的函数从字段中获取值(使用 jQuery)假设输入的值是数字(我宁愿在用户输入数据时验证字段,所以我确定字段内容是数字)。

在浮点值的情况下,如果字段格式正确,该函数将正确返回浮点值。

此功能远未完成,但它可以快速解决输入为 1,234.56 或 1,234,567 的值的“ , ”(逗号)问题。只要内容是数字,它将返回有效数字。

返回命令中变量Value前面的+ )符号是JavaScript 中用来确保返回的变量内容为数字的“肮脏技巧” 。

很容易将函数修改为其他用途,例如(例如)将字符串转换为数值,同时处理 " , " (逗号) 问题:

function parseValue(str) {
  Value = parseFloat( str.replace(/,/g,'') ).toFixed(2);
  return +Value;
}

这两种操作甚至可以组合成一个功能。IE:

function parseNumber(item,isField=false) {
  Value = (isField) ? parseFloat( $(item).val().replace(/,/g,'') ).toFixed(2) : parseFloat( item.replace(/,/g,'') ).toFixed(2)
  return +Value;
}

在这种情况下,如果调用函数result = parseNumber('12,092.98'); 它将解析该值,因为它是一个字符串。但如果调用为result = parseNumber('#MyField', true); 它将尝试从'#MyField'获取值。

正如我之前所说,这样的功能还远未完成,可以通过多种方式进行扩展。一个想法是检查给定参数(字符串)的第一个字符,并根据字符串格式决定从何处获取要解析的值(如果第一个字符 = '#'那么它是来自 DOM 对象的 ID,否则,如果以数字开头,则必须是要解析的字符串)。

试试看……快乐的编码。

于 2015-05-13T22:00:05.953 回答