我有一个数组包含价格的字符串,有时包围字符。Javascript从字符串中获取数字?
我该如何转换它?
[0] > '$9.99/aa'
[1] > '$2.99'
[2] > '$1.'
到:
[0] > '9.99'
[1] > '2.99'
[2] > '1'
因此,我可以做的值进行比较?我只需要知道如何改变之一,我可以把它应用到阵列容易
我有一个数组包含价格的字符串,有时包围字符。Javascript从字符串中获取数字?
我该如何转换它?
[0] > '$9.99/aa'
[1] > '$2.99'
[2] > '$1.'
到:
[0] > '9.99'
[1] > '2.99'
[2] > '1'
因此,我可以做的值进行比较?我只需要知道如何改变之一,我可以把它应用到阵列容易
+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);
偷懒的方法:
+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));
}
更紧密地阅读问题。 – 2012-01-18 22:02:27
这些都不能与提供的数据一起使用。你只是阅读*标题*,是不是。 – 2012-01-18 22:03:15
@RobW:你指的是循环部分还是别的? – Hello71 2012-01-18 22:03:19
你的情况需要一个正则表达式,因为所有的本地转化数量的方法失败当字符串以非数字/点作为前缀时。
var string = '$1.22'; //Example
string = string.replace(/[^0-9.]+/g, '');
// string = '1.22'
如果你想这个字符串转换为数字,然后,你可以使用parseInt
,+
,1*
。
对于这些转换数目的方法的比较,参见this answer
+/[\d\.]+/.exec('$9.99/aa')[0]
查找的数字和周期中的第一组,将它们转换为浮法
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]);
地带的一切,并应用到parseFloat
其余:
s = "$9.99/aa"
alert(parseFloat(s.replace(/^\D*/, '')))
你的正则表达式非常广泛。 – Hello71 2012-01-18 22:08:44
+1我唯一要补充的是我不认为这个转换(或者任何js中的float转换)都是依赖locale的。只是一个FYI – 2012-01-18 22:10:41
谢谢,但我仍然有一个问题。如果字符串是:“$ 1.99”。我得到“1.99”。有这个简单的解决方案吗? – lisovaccaro 2012-01-18 22:22:38