在 JavaScript 中使用逗号小数分隔符解析数字

IT技术 javascript validation
2021-03-11 20:56:52

我用这个函数来检查一个值是否是一个数字:

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

我的程序需要使用德国的value观。我们使用逗号而不是点作为小数点分隔符,因此此功能不起作用。

我试图这样做:

n.replace(",",".")

但它似乎也不起作用。我尝试使用的确切功能是:

function isNumber(n) {
    n=n.replace(",",".");
    return !isNaN(parseFloat(n)) && isFinite(n);
}

如果我的陈述不够清楚,数字看起来像这样9.000,28而不是通常的9,000.28

3个回答

您需要先替换(删除)千位分隔符中的点,然后处理小数点:

function isNumber(n) {
    'use strict';
    n = n.replace(/\./g, '').replace(',', '.');
    return !isNaN(parseFloat(n)) && isFinite(n);
}
@FakeRainBrigand 谢谢,我更新了我的代码.. 正则表达式不太好,你觉得这对吗?
2021-04-24 20:56:52
此解决方案适用于“好”用户,但即使对“坏”用户也需要验证。如果你有以下(例如)它不应该通过时: var testNumber = "10.0.0,000";
2021-04-24 20:56:52
失败111.222.3333,44演示. .replace除非您有全局正则表达式,否则只会替换第一个匹配项。编辑:oop搞砸了输入字符串
2021-04-26 20:56:52
是的,完全正确(我在我的原始小提琴中弄错了)
2021-04-29 20:56:52
var number = parseFloat(obj.value.replace(",",""));

你可能也希望这件事反过来......

obj.value = number.toLocaleString('en-US', {minimumFractionDigits: 2});
有了这个答案 123,4 为您提供了 1234 的解析和 1234.00 的本地化。它没有回答问题,即解析逗号小数点分隔符。
2021-05-04 20:56:52

我相信最好的方法就是使用 toLocaleString 方法。例如,我住在巴西,这里我们用逗号作为小数点分隔符。然后我可以这样做:

var number = 10.01;
console.log(number)
// log: 10.01

console.log(number.toLocaleString("pt-BR"));
// log: 10,01