这将是一种很好的处理方式吗?
我已经考虑过删除逗号然后解析为浮动。
你知道更好/更清洁的方法吗?
谢谢
parseFloat( theString.replace(/,/g,'') );
我不知道为什么没有人建议这个表达-
parseFloat( theString.replace(/[^\d\.]/g,'') );
删除除句点以外的所有非数字字符。您也不需要自定义函数/循环,这只是矫枉过正。
没有。去掉逗号。
您可以使用字符串替换方法,但不能像正则表达式允许的那样在单行中使用。
while(str.indexOf(',')!=-1)str= str.replace(',','');
parseFloat(str);
或者制作一个没有 regexp= 的表达式
return parseFloat(str.split(',').join(''));
我会使用正则表达式。
我没有足够的声誉来添加评论,但对于任何想知道正则表达式与拆分/加入性能的人来说,这里有一个快速的小提琴: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 毫秒
所以我认为可以肯定地说正则表达式是在这种情况下要走的路
基于@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.
它可能没有那么快,但你想要替代品:)
解决大多数常见问题的简单功能怎么样?
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,否则,如果以数字开头,则必须是要解析的字符串)。
试试看……快乐的编码。