我有一個數組包含價格的字符串,有時包圍字符。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