2009-02-17 138 views
181

我有一個將在它的貨幣字符串,然後我需要的是字符串轉換爲雙對其執行某些操作文本框。如何使用jQuery或Javascript將貨幣字符串轉換爲double?

「$ 1,100.00」 - > 1100.00

這需要發生的所有客戶端。我別無選擇,只能將貨幣字符串作爲貨幣字符串作爲輸入,但需要將其轉換爲雙精度值以允許進行一些數學運算。

回答

359

刪除所有非點/位:

var currency = "$1,100.00"; 
var number = Number(currency.replace(/[^0-9\.-]+/g,"")); 
+0

似乎完全轉換爲我,謝謝 – 2009-02-17 23:35:11

+0

+1(對不起,以前的評論,事實上,你實際上*排除*點以及由於某種原因沒有出現在我身上。) – Tomalak 2009-02-18 00:20:54

+3

RegExp的另一個原因可以是優雅。 – OnesimusUnbound 2011-06-03 05:28:21

3

你可以試試這個

<script type="text/javascript"> 

var str="$1,112.12"; 
str = str.replace(",",""); 
str = str.replace("$",""); 
document.write(parseFloat(str)); 

</script> 
+4

將不起作用,只有第一個逗號被替換。 – Lee 2012-02-20 19:47:15

15

使用正則表達式來刪除格式化(美元和逗號),並使用parseFloat將字符串轉換爲浮點number.`

var currency = "$1,100.00"; 
currency.replace(/[$,]+/g,""); 
var result = parseFloat(currency) + .05; 
+7

值得注意的是,當您添加貨幣時,您不應該在任何非「玩具」應用程序中使用float。你會以**不是**確切的總數結束。 – Ally 2012-07-19 16:24:12

+6

當parseFloat(「151.20」* 100)給你15119.999999999998但parseFloat(「151.40」* 100)給你15140時,你會感到驚訝和不高興。永遠不要使用parseFloat來獲得金錢。使用特定的庫來處理金錢,例如accounting.js或這裏提到的其他任何庫。 – bambery 2015-05-22 18:35:35

11

我知道這是一個老問題,但想給一個額外的選項。

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 

並允許您與其他文化合作。

3

我知道這是一個老問題,但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')); 

假設:

  • 貨幣值以10進製表示法
  • 有字符串中沒有數字不屬於貨幣值
  • 貨幣值包含0或2位數的一部分在其小數部分*

正則表達式甚至可以處理像「1,999美元和9 9美分「,雖然它不是一個預期的功能,不應該依賴它。

希望這會幫助別人。

19

accounting.js是要走的路。我在一個項目中使用它,並有很好的使用經驗。

accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99 
accounting.unformat("€ 1.000.000,00", ","); // 1000000 

您可以在GitHub

4

發現這個例子運行正常

var currency = "$123,456.00"; 
var number = Number(currency.replace(/[^0-9\.]+/g,"")); 
alert(number); 

http://jsbin.com/ecAviVOV/2/edit

2
jQuery.preferCulture("en-IN"); 
var price = jQuery.format(39.00, "c"); 

輸出:盧比。 39.00

use jquery.glob.js, 
    jQuery.glob.all.js 
0
$ 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); 
    } 
0

這是我的功能。與所有貨幣工程..

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$")

2

// 「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; 
} 
0
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; 
}