web-dev-qa-db-de.com

Wie konvertiere ich eine Währungszeichenfolge mit jQuery oder Javascript in ein Double?

Ich habe ein Textfeld, das eine Currency - Zeichenfolge enthält, die ich dann in ein Double umwandeln muss, um einige Operationen darauf auszuführen. 

"$1,100.00"1100.00

Dies muss auf der gesamten Client-Seite erfolgen. Ich habe keine andere Wahl als den Currency String als Currency String als Eingabe zu belassen, muss ihn aber in ein Double umwandeln/konvertieren, um einige mathematische Operationen zu ermöglichen. 

202
Bobby Borszich

Entfernen Sie alle Nicht-Punkte/Ziffern:

var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
410
CMS

accounting.js ist der Weg zu gehen. Ich habe es in einem Projekt verwendet und hatte sehr gute Erfahrungen damit.

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

Sie finden es unter GitHub

22
Thomas Kremmel

Entfernen Sie die Formatierung mit einem Regex (Dollar und Komma) und konvertieren Sie den String mit parseFloat in eine Fließkommazahl.`

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

Ich weiß, das ist eine alte Frage, wollte aber eine zusätzliche Option geben. 

Mit jQuery Globalize können Sie ein kulturspezifisches Format für einen Float parsen. 

https://github.com/jquery/globalize

Gegeben eine Zeichenfolge "$ 13.042.00" und Globalize auf en-US gesetzt:

Globalize.culture("en-US");

Sie können den Float-Wert wie folgt analysieren:

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

Dies gibt Ihnen:

13042.00

Und ermöglicht es Ihnen, mit anderen Kulturen zu arbeiten. 

12
Phill

Dieses Beispiel läuft in Ordnung 

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

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

7
PaVen Nguyen

Ich weiß, dass dies eine alte Frage ist, aber die Antwort von CMS scheint einen winzigen kleinen Fehler zu haben: Sie funktioniert nur, wenn das Währungsformat "." als Dezimaltrennzeichen . Wenn Sie beispielsweise mit russischen Rubeln arbeiten müssen, sieht die Zeichenfolge folgendermaßen aus: "1 000,00 rub."

Meine Lösung ist viel weniger elegant als CMS, sollte aber den Trick erfüllen. 

var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = /\D*(\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'));

Annahmen:

  • der Währungswert verwendet die Dezimalschreibweise
  • die Zeichenfolge enthält keine Ziffern, die nicht Teil des Währungswerts sind
  • währungswert enthält entweder 0 oder 2 Ziffern im Bruchteil *

Der Regex kann sogar so etwas wie "1.999 Dollar und 99 Cent" handhaben, obwohl es keine beabsichtigte Funktion ist und man sich nicht darauf verlassen sollte.

Hoffe das hilft jemandem.

5
Vindicar

Ich weiß, dass Sie eine Lösung für Ihre Frage gefunden haben. Ich wollte Ihnen nur empfehlen, dass Sie sich das folgende umfangreichere jQuery-Plugin für internationale Zahlenformate ansehen:

Internationaler Zahlenformatierer

3
IEnumerator

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

Sie können es versuchen

<script type="text/javascript">

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

</script>
2
Ólafur Waage
jQuery.preferCulture("en-IN");
var price = jQuery.format(39.00, "c");

ausgabe ist: Rs. 39,00

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

Diese Funktion sollte unabhängig von Gebietsschema und Währungseinstellungen funktionieren:

function getNumPrice(price, decimalpoint) {
    var p = price.split(decimalpoint);
    for (var i=0;i<p.length;i++) p[i] = p[i].replace(/\D/g,'');
    return p.join('.');
}

Dies setzt voraus, dass Sie das Dezimalzeichen kennen (in meinem Fall wird das Gebietsschema von PHP festgelegt, daher bekomme ich es mit <?php echo cms_function_to_get_decimal_point(); ?>).

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;
}
0
var parseCurrency = function (e) {
    if (typeof (e) === 'number') return e;
    if (typeof (e) === 'string') {
        var str = e.trim();
        var value = Number(e.replace(/[^0-9.-]+/g, ""));
        return str.startsWith('(') && str.endsWith(')') ? -value: value;
    }

    return e;
} 
0

Das ist meine Funktion. Funktioniert mit allen Währungen.

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]/, "")
    );

}

Verwendung: toFloat("$1,100.00") oder toFloat("1,100.00$")

0
bycoder