将带点或逗号的string转换为小数点分隔符,以便在JavaScript中编号

input元素包含数字a,逗号或点用作小数点分隔符,可以使用空格将数千个分组,如下所示:

'1,2'
'110 000,23'
'100 1.23'

如何使用JavaScript将它们转换为浏览器中的浮点数?

使用jQuery和jQuery UI。 Number(string)返回NaNparseFloat()在第一个空格或逗号停止。

先做一个replace:

 parseFloat(str.replace(',','.').replace(' ','')) 

完美的解决scheme

accounting.js是一个用于数字,货币和货币格式的小型JavaScript库。

检查这个参考

你可以用空stringreplace所有的空格,点所有的空格,然后parsing它。

 var str = "110 000,23"; var num = parseFloat(str.replace(/\s/g, "").replace(",", ".")); console.log(num); 

我在第一个使用正则expression式能够匹配所有的空间,而不仅仅是第一个。

我意识到我迟到了,但我想要一个解决scheme,正确处理数字分组以及不同的小数分隔符的货币。 由于这些都没有完全涵盖我的使用案例,所以我写了自己的解决scheme,可能对其他人有用:

 function parsePotentiallyGroupedFloat(stringValue) { stringValue = stringValue.trim(); var result = stringValue.replace(/[^0-9]/g, ''); if (/[,\.]\d{2}$/.test(stringValue)) { result = result.replace(/(\d{2})$/, '.$1'); } return parseFloat(result); } 

这应该去除任何非数字,然后检查是否有一个小数点(或逗号)后跟两位数字,如果需要插入小数点。

值得注意的是,我专门针对货币,因此它不是小数点就是两位。 除非您知道当前语言环境的具体情况,否则很难确定遇到的第一个潜在小数点是小数点还是数字分组字符(例如, 1.542可能是1542 ),但应该很容易定制通过将\d{2}$更改为与小数点后您期望的值相匹配的内容,来满足您的特定用例。

关于什么:

 parseFloat(str.replace(' ', '').replace('.', '').replace(',', '.')); 

这是最好的解决scheme

http://numeraljs.com/

 numeral().unformat('0.02'); = 0.02 

所有其他解决scheme都要求您事先了解该格式。 我需要在每种情况下检测(!)格式,这就是我最终的结果。

 function detectFloat(source) { let float = accounting.unformat(source); let posComma = source.indexOf(','); if (posComma > -1) { let posDot = source.indexOf('.'); if (posDot > -1 && posComma > posDot) { let germanFloat = accounting.unformat(source, ','); if (Math.abs(germanFloat) > Math.abs(float)) { float = germanFloat; } } else { // source = source.replace(/,/g, '.'); float = accounting.unformat(source, ','); } } return float; } 

以下情况进行了testing:

  const cases = { "0": 0, "10.12": 10.12, "222.20": 222.20, "-222.20": -222.20, "+222,20": 222.20, "-222,20": -222.20, "-2.222,20": -2222.20, "-11.111,20": -11111.20, }; 

build议欢迎。

从数字到货币string很容易通过Number.prototype.toLocaleString 。 然而,反过来似乎是一个普遍的问题。 JS标准中可能无法获得千位分隔符和小数点。

在这个特定的问题上,千位分隔符是一个白色空间" "但在很多情况下,它可能是一个时间段"." 小数点可以是逗号"," 。 如在1 000 000,001 000 000,00 。 那么这是我如何转换成一个适当的浮点数。

 var price = "1 000.000,99", value = +price.replace(/(\.|\s)|(\,)/g,(m,p1,p2) => p1 ? "" : "."); console.log(value);