我有一個將在它的貨幣字符串,然後我需要的是字符串轉換爲雙對其執行某些操作文本框。如何使用jQuery或Javascript將貨幣字符串轉換爲double?
「$ 1,100.00」 - > 1100.00
這需要發生的所有客戶端。我別無選擇,只能將貨幣字符串作爲貨幣字符串作爲輸入,但需要將其轉換爲雙精度值以允許進行一些數學運算。
我有一個將在它的貨幣字符串,然後我需要的是字符串轉換爲雙對其執行某些操作文本框。如何使用jQuery或Javascript將貨幣字符串轉換爲double?
「$ 1,100.00」 - > 1100.00
這需要發生的所有客戶端。我別無選擇,只能將貨幣字符串作爲貨幣字符串作爲輸入,但需要將其轉換爲雙精度值以允許進行一些數學運算。
刪除所有非點/位:
var currency = "$1,100.00";
var number = Number(currency.replace(/[^0-9\.-]+/g,""));
我知道你已經找到了解決你的問題,我只是想建議,也許你看看下面的更廣泛的jQuery插件國際數字格式:
你可以試試這個
<script type="text/javascript">
var str="$1,112.12";
str = str.replace(",","");
str = str.replace("$","");
document.write(parseFloat(str));
</script>
將不起作用,只有第一個逗號被替換。 – Lee 2012-02-20 19:47:15
使用正則表達式來刪除格式化(美元和逗號),並使用parseFloat將字符串轉換爲浮點number.`
var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
我知道這是一個老問題,但想給一個額外的選項。
jQuery的Globalize的給出解析培養特定格式的浮子的能力。
https://github.com/jquery/globalize
給出一個字符串 「$ 13,042.00」,以及全球化設置爲EN-US:
Globalize.culture("en-US");
可以解析浮點值了,像這樣:
var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));
這將給你:
13042.00
並允許您與其他文化合作。
我知道這是一個老問題,但CMS的答案似乎有一個小小的缺陷:它只適用於貨幣格式使用「。」。作爲小數分隔符。 例如,如果您需要與俄羅斯盧布工作,該字符串將是這樣的: 「1個000,00擦。」
我的解決方案比CMS的少得多優雅,但它應該做的伎倆。
var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = /\D*(\d.*?\d)(?:\D+(\d{2}))?\D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));
假設:
正則表達式甚至可以處理像「1,999美元和9 9美分「,雖然它不是一個預期的功能,不應該依賴它。
希望這會幫助別人。
accounting.js是要走的路。我在一個項目中使用它,並有很好的使用經驗。
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000
您可以在GitHub
發現這個例子運行正常
var currency = "$123,456.00";
var number = Number(currency.replace(/[^0-9\.]+/g,""));
alert(number);
jQuery.preferCulture("en-IN");
var price = jQuery.format(39.00, "c");
輸出:盧比。 39.00
use jquery.glob.js,
jQuery.glob.all.js
$ 150.00
Fr. 150.00
€ 689.00
我已經爲上述三種貨幣符號。你可以做到這一點對別人也測試。
var price = Fr. 150.00;
var priceFloat = price.replace(/[^\d\.]/g, '');
上述正則表達式將刪除一切不是數字或period.So你可以得到的字符串沒有貨幣符號,但在「神父150.00」的情況下,如果你控制檯輸出,那麼你會得到價格as
console.log('priceFloat : '+priceFloat);
output will be like priceFloat : .150.00
這是錯誤的,所以你檢查索引「。」。然後拆分並得到正確的結果。
if (priceFloat.indexOf('.') == 0) {
priceFloat = parseFloat(priceFloat.split('.')[1]);
}else{
priceFloat = parseFloat(priceFloat);
}
這是我的功能。與所有貨幣工程..
function toFloat(num) {
dotPos = num.indexOf('.');
commaPos = num.indexOf(',');
if (dotPos < 0)
dotPos = 0;
if (commaPos < 0)
commaPos = 0;
if ((dotPos > commaPos) && dotPos)
sep = dotPos;
else {
if ((commaPos > dotPos) && commaPos)
sep = commaPos;
else
sep = false;
}
if (sep == false)
return parseFloat(num.replace(/[^\d]/g, ""));
return parseFloat(
num.substr(0, sep).replace(/[^\d]/g, "") + '.' +
num.substr(sep+1, num.length).replace(/[^0-9]/, "")
);
}
用法:toFloat("$1,100.00")
或toFloat("1,100.00$")
// 「10.000.500,61 TL」 price_to_number => 10000500.61
// 「10000500.62」 number_to_price => 10.000。 500,62
JS FIDDLE:https://jsfiddle.net/Limitlessisa/oxhgd32c/
var price="10.000.500,61 TL";
document.getElementById("demo1").innerHTML = price_to_number(price);
var numberPrice="10000500.62";
document.getElementById("demo2").innerHTML = number_to_price(numberPrice);
function price_to_number(v){
if(!v){return 0;}
v=v.split('.').join('');
v=v.split(',').join('.');
return Number(v.replace(/[^0-9.]/g, ""));
}
function number_to_price(v){
if(v==0){return '0,00';}
v=parseFloat(v);
v=v.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
v=v.split('.').join('*').split(',').join('.').split('*').join(',');
return v;
}
function NumberConvertToDecimal (number) {
if (number == 0) {
return '0.00';
}
number = parseFloat(number);
number = number.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1");
number = number.split('.').join('*').split('*').join('.');
return number;
}
似乎完全轉換爲我,謝謝 – 2009-02-17 23:35:11
+1(對不起,以前的評論,事實上,你實際上*排除*點以及由於某種原因沒有出現在我身上。) – Tomalak 2009-02-18 00:20:54
RegExp的另一個原因可以是優雅。 – OnesimusUnbound 2011-06-03 05:28:21