我试图从数据网格解析两个值。字段是数字,当它们有逗号(例如554,20)时,我无法获得逗号后的数字。我试过parseInt和parseFloat。我该怎么做呢?
parseInt
parseFloat
用点代替逗号。
这只会返回554:
var value = parseFloat("554,20")
这将返回554.20:
var value = parseFloat("554.20")
所以最后,你可以简单地使用:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
别忘了parseInt()只能用来解析整数(不能解析浮点数)。在你的例子中,它只会返回554。此外,在浮点数上调用parseInt()将不会四舍五入该数字:它将取其底数(最接近的较低整数)。
parseInt()
扩展的例子来回答Pedro Ferreira的问题:
如果文本字段像1.234.567,99一样包含数千个分隔点,则可以用另一个replace提前消除:
1.234.567,99
replace
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
如果它们是单独的值,试试这个:
var values = "554,20".split(",") var v1 = parseFloat(values[0]) var v2 = parseFloat(values[1])
如果它们是单个值(比如在法语中,1 / 2写成0,5)
var value = parseFloat("554,20".replace(",", "."));
你试过这样做吗?: p
var str = '3.8';ie alert( +(str) + 0.2 );
+(字符串)将字符串转换为浮点数。
方便的!
所以为了解决你的问题,你可以这样做:
var floatValue = +(str.replace(/,/,'.'));
如果你像这样扩展String对象..
String.prototype.float = function() { return parseFloat(this.replace(',', '.')); }
.. 你可以这样运行它
"554,20".float() > 554.20
也适用于dot
"554.20".float() > 554.20 typeof "554,20".float() > "number"
@GusDeCool或任何其他人试图替换超过一千个分隔符,一种方法是regex全局替换:/foo/g。只要记住.是一个元字符,所以你必须转义它或把它放在括号里(\.或[.])。这里有一个选择:
/foo/g
.
\.
[.]
var str = '6.000.000'; str.replace(/[.]/g,",");
我遇到了同样的问题,只是我事先不知道千位分隔符和小数点分隔符是什么。我最终编写了一个库来实现这个功能。如果你对它感兴趣,它是:https://github.com/GuillaumeLeclerc/number-parsing
您可以使用此功能。它将用' '替换逗号,然后它将parsefloat值,之后它将再次调整value中的逗号。
function convertToFloat(val) { if (val != '') { if (val.indexOf(',') !== -1) val.replace(',', ''); val = parseFloat(val); while (/(\d+)(\d{3})/.test(val.toString())) { val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); } } return val; }
试一试
let str ="554,20"; let float = +str.replace(',','.'); let int = str.split(',').map(x=>+x); console.log({float,int});
如果有人正在寻找一种从任意字符串解析浮动的方法,
可以这样做:
function extractFloat(text) { const match = text.match(/\d+((\.|,)\d+)?/) return match && match[0] } extractFloat('some text with float 5.25') // 5.25