当我需要 500000 时,javascript parseFloat '500,000' 返回 500

IT技术 javascript parsefloat
2021-02-22 01:48:51

如何处理这个问题的好方法?

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

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

谢谢

6个回答
parseFloat( theString.replace(/,/g,'') );
请不要使用正则表达式。 .replace(',', '')
2021-04-26 01:48:51
@Adam 没有理由不在这里使用 RegEx
2021-05-03 01:48:51
是的,当可能出现不止一次针时,您不得不求助于正则表达式来执行简单的字符串替换很烦人,但这对您来说是古怪的 JavaScript。当针可能包含正则表达式特殊字符并且您不想担心转义时,另一种习惯用法是s.split(needle).join(replacement).
2021-05-13 01:48:51
@Adam,假设数字是 100 万,"1,000,000"如果您不使用带有全局标志的正则表达式,则只会替换第一个逗号 -> "1000,000"
2021-05-14 01:48:51
@Adam - JP 的解决方案更具动态性,因为它涵盖了多个逗号。
2021-05-21 01:48:51

我不知道为什么没有人提出这种表达方式——

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

删除除句点以外的任何非数字字符。您也不需要为此自定义函数/循环,这太过分了。

谢谢!这也处理了“$”。很好的答案:-)
2021-05-09 01:48:51

不。去掉逗号。

@Matchu 不一定,我来寻找一个非常简洁的答案(我想,从技术上讲,我和 OP 有相同的问题)。就我而言,您的回答既准确又简洁(OP 似乎同意)。无论如何,只是对我们中的一些“未来观众”说,这个答案仍然比 999 好(因此我赞成)。我希望如果有人不知道如何替换逗号,他们会用谷歌搜索,而且很可能永远不会看到这个页面。就我而言,虽然我用谷歌搜索并发现此页面的标题与我的搜索文本非常匹配。谢谢!
2021-04-21 01:48:51
您将如何在 de-DE 语言环境中处理此问题?12,500.50 在美国是 12,500.50,但在 de-DE 是 12.500.50,剩下 12.50075。有人碰巧有处理这种“魔法”的图书馆吗?
2021-05-01 01:48:51
@Vicer:严格来说,999 的答案并不是这个特定问题的答案:OP 已经知道如何从字符串中删除逗号,并询问是否存在另一种技术。答案是“不”。不过,对于未来知道如何删除逗号的人来说,999 的答案肯定更有帮助,即使它实际上并没有回答原始问题。但是,嘿。由于唯一会访问此页面的人是在谷歌上搜索如何用逗号处理数字,因此对于所有未来的观众来说,他绝对是更好的答案。
2021-05-12 01:48:51
这不是一个很好的答案,请参阅下面的 999 答案,这实际上确实有帮助。stackoverflow.com/a/3205751/111757
2021-05-18 01:48:51

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

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

或者制作一个没有正则表达式的单个表达式=

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

我会使用正则表达式。

我没有足够的声誉来添加评论,但是对于任何想知道 regex 与 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 毫秒

所以我认为可以肯定地说正则表达式是这种情况下的方法