どのようにjQueryまたはJavascriptで通貨文字列をダブルに変換するのですか?


私はそれにいくつかの操作を実行するには、文字列をダブルに変換する必要がある通貨文字列を持つテキストボックスがあります。

"$ 1,100.00" - > 1100.00

これはすべてのクライアント側で発生する必要があります。 私は通貨文字列を入力として通貨文字列として残しておきたいが、いくつかの数学的演算を可能にするためにはそれを二重にキャスト/変換する必要がある。



Answers



すべてのドット/数字を削除:

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



accounting.jsは行く方法です。 私はプロジェクトでそれを使用し、それを使用して非常に良い経験を持っていた。

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

あなたはGitHubで見つけることができます




正規表現を使用して書式設定(ドルとコンマ)を削除し、parseFloatを使用して文字列を浮動小数点数に変換します。

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



これは古い質問ですが、追加のオプションを与えたいと思っています。

jQuery Globalizeは、文化固有のフォーマットをフロートに解析する機能を提供します。

https://github.com/jquery/globalize

文字列「$ 13,042.00」が与えられ、Globalizeがen-USに設定されているとします。

Globalize.culture("en-US");

float値は次のように解析できます。

var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));

これはあなたに与えるでしょう:

13042.00

そしてあなたは他の文化と一緒に働くことができます。




この例はokを実行します

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

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




あなたはこれを試すことができます

<script type="text/javascript">

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

</script>



私はあなたの質問への解決策を見つけたことを知っています、私はちょうど多分国際番号形式のための次のより広範なjQueryプラグインを見てお勧めしたい:

国際番号フォーマッタ




私はこれが古い質問だと知っていますが、CMSの答えには小さな欠点が1つしかないようです:通貨フォーマットで "。"を使用すると機能します。 小数点の区切り記号として。 たとえば、ロシアのルーブルで作業する必要がある場合、文字列は次のようになります。 "1 000,00 rub。"

私のソリューションは、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ドル99セント"のようなものを扱うこともできますが、それは意図された機能ではなく、信頼されるべきではありません。

これが誰かを助けることを願っています。




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

出力は:Rsです。 39.00

use jquery.glob.js,
    jQuery.glob.all.js



// "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;
}



    $ 150.00
    Fr. 150.00
     689.00

私は3つ以上の通貨記号についてテストしました。あなたは他の人のためにそれを行うこともできます。

    var price = Fr. 150.00;
    var priceFloat = price.replace(/[^\d\.]/g, '');

正規表現の上には、数字やピリオドではないものがすべて削除されます。通貨記号のない文字列を得ることができますが、 "Fr. 150.00"の場合は出力用コンソールとして

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




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;
}