我有一个包含价格字符串的数组,有时会被字符包围。
如何从中转换它?
[0] > '$9.99/aa'
[1] > '$2.99'
[2] > '$1.'
为:
[0] > '9.99'
[1] > '2.99'
[2] > '1'
所以我可以与价值观进行比较?我只需要知道如何更改一个,我可以轻松地将它应用到数组
答案 0 :(得分:2)
+myString.replace(/[^\d.ex-]+/gi, '')
删除所有不能出现在JavaScript编号中的字符,然后将+
运算符应用于它以将其转换为数字。如果您没有十六进制格式或指数格式的数字,那么您可以不使用ex
。
编辑:
要处理区域设置,并以更加量身定制的方式处理数字,我会执行以下操作
// Get rid of myriad separators and normalize the fraction separator.
if ((0.5).toLocaleString().indexOf(',') >= 0) {
myString = myString.replace(/\./g, '').replace(/,/g, '.');
} else {
myString = myString.replace(/,/g, '');
}
var numericValue = +(myString.match(
// Matches JavaScript number literals excluding octal.
/[+-]?(?:(?:(?:0|[1-9]\d*)(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|0x[0-9a-f]+)/i)
// Will produce NaN if there's no match.
|| NaN);
答案 1 :(得分:2)
您的案例需要正则表达式,因为当字符串以非数字/点为前缀时,所有本机数字转换方法都会失败。
var string = '$1.22'; //Example
string = string.replace(/[^0-9.]+/g, '');
// string = '1.22'
如果您想将此字符串转换为数字,之后您可以使用parseInt
,+
,1*
。
有关这些数字转换方法的比较,请参阅this answer
答案 2 :(得分:1)
parseFloat()适用于这种情况。正则表达式将为0索引中的所有案例提供匹配的数字。示例代码如下。
var one = "2.99";
var two = '$1.';
var three = '$3tees';
var four = '$44.10'
var regex = /\d+\.?(\d+)?/;
var num = parseFloat(one.match(regex)[0]);
答案 3 :(得分:1)
在第一个数字前删除所有内容并将parseFloat
应用于其余数字:
s = "$9.99/aa"
alert(parseFloat(s.replace(/^\D*/, '')))
答案 4 :(得分:0)
懒惰的方式:
+string;
正确的方法:
parseInt(string, 10);
因此:
for (var i = 0; i < arr.length; i++) {
var match = /\$(\d*)\.(\d\d)/.exec(arr[i]);
arr[i] = parseInt(match[1] + match[2]);
}
编辑:哦,你想要的东西超过10美元。
另一个编辑:显然parseInt
(至少在我的浏览器中)忽略尾随字符。在那种情况下,我原来的实现会起作用。
for (var i = 0; i < arr.length; i++) {
arr[i] = parseInt(arr[i].substring(1));
}
答案 5 :(得分:0)
+/[\d\.]+/.exec('$9.99/aa')[0]
查找第一组数字和句点,将它们转换为浮点数