我正在尝试从数据网格中解析两个值。这些字段是数字类型,但当它们含有逗号(例如,554,20)时,我无法获取逗号后面的数字。我已经尝试了parseInt
和parseFloat
。请问我该如何处理?
我正在尝试从数据网格中解析两个值。这些字段是数字类型,但当它们含有逗号(例如,554,20)时,我无法获取逗号后面的数字。我已经尝试了parseInt
和parseFloat
。请问我该如何处理?
如果它们是要分开的值,尝试这样:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
如果它们是单一值(例如在法语中,半个值写作0,5)的话
var value = parseFloat("554,20".replace(",", "."));
+(string)
而不是像@Stev建议的那样使用parseString(string)
。因此,第一个示例将是v1 = +(values[0]); v2 = +(values[1]);
。 - Jesse Rusak6.000.000
。函数replace只会替换第一个逗号分隔符。 - GusDeCooL你曾经尝试过这样做吗?:p
var str = '3.8';ie
alert( +(str) + 0.2 );
+(string)可以将字符串强制转换为浮点数。
很方便!
因此,为了解决您的问题,您可以像这样做:
var floatValue = +(str.replace(/,/,'.'));
+(str)
的解决方案 - parseFloat
会忽略数字后面的无效字符,而在这些情况下+(str)
将返回NaN
,这正是我需要的。 - Alex将逗号替换为点号。
这将仅返回554:
var value = parseFloat("554,20")
这将返回554.20:
var value = parseFloat("554.20")
因此,最终你可以简单地使用:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
请注意,parseInt()
只能用于解析整数(不能解析浮点数)。在您的情况下,它只会返回 554。此外,在浮点数上调用 parseInt() 不会四舍五入数字:它将取其 floor(最接近较低的整数)。
以下是回答 Pedro Ferreira 在评论中提出的问题的扩展示例:
如果文本字段包含像 1.234.567,99
这样的千位分隔符,可以先使用另一个 replace
函数将其删除:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
如果您像这样扩展String对象...
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
..你可以像这样运行它
"554,20".float()
> 554.20
同时也适用于句点
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool或其他试图替换一千个以上分隔符的人,一种方法是使用正则表达式全局替换:/foo/g
。请记住,.
是元字符,因此您必须对其进行转义或将其放入方括号中(\.
或[.]
)。以下是一种选项:
var str = '6.000.000';
str.replace(/[.]/g,",");
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;
}
如果有人想要从任意字符串中解析出 浮点数,可以按照以下方法进行:
代码如下:
function extractFloat(text) {
const match = text.match(/\d+((\.|,)\d+)?/)
return match && match[0]
}
extractFloat('some text with float 5.25') // 5.25
尝试
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});
我曾经遇到过同样的问题,但是我事先不知道千位分隔符和小数点分隔符是什么。最终我写了一个库来解决这个问题。如果你感兴趣,这里是链接:https://github.com/GuillaumeLeclerc/number-parsing