web-dev-qa-db-fra.com

Comment convertir une chaîne de devise en double avec jQuery ou Javascript?

J'ai une zone de texte qui aura une chaîne currency dans lequel je dois ensuite convertir cette chaîne en double pour effectuer certaines opérations dessus. 

"$1,100.00"1100.00

Cela doit se produire tout côté client. Je n'ai d'autre choix que de laisser la chaîne currency sous la forme d'une chaîne currency mais il faut la convertir/la convertir en double pour permettre certaines opérations mathématiques. 

202
Bobby Borszich

Supprimer tous les points/chiffres:

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

accounting.js est la voie à suivre. Je l'ai utilisé lors d'un projet et j'ai eu une très bonne expérience.

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

Vous pouvez le trouver sur GitHub

22
Thomas Kremmel

Utilisez une expression régulière pour supprimer le formatage (dollar et virgule), et utilisez parseFloat pour convertir la chaîne en nombre à virgule flottante.

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

Je sais que c'est une vieille question, mais je voulais donner une option supplémentaire. 

JQuery Globalize permet d'analyser un format spécifique à une culture en un flottant. 

https://github.com/jquery/globalize

Avec la chaîne "$ 13,042.00" et Globalize défini sur en-US:

Globalize.culture("en-US");

Vous pouvez analyser la valeur float comme ceci:

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

Cela vous donnera:

13042.00

Et vous permet de travailler avec d'autres cultures. 

12
Phill

Cet exemple fonctionne bien 

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

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

7
PaVen Nguyen

Je sais que c’est une vieille question, mais la réponse de CMS semble avoir un petit défaut: cela ne fonctionne que si le format monétaire utilise "." comme séparateur décimal . Par exemple, si vous devez travailler avec des roubles russes, la chaîne ressemblera à ceci: "1 000,00 rub."

Ma solution est beaucoup moins élégante que celle des CMS, mais elle devrait faire l'affaire. 

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'));

Hypothèses:

  • la valeur monétaire utilise la notation décimale
  • il n'y a pas de chiffres dans la chaîne qui ne font pas partie de la valeur monétaire
  • la valeur de la devise contient 0 ou 2 chiffres dans sa partie décimale *

L’expression rationnelle peut même traiter quelque chose comme «1 999 dollars et 99 cents», bien qu’il ne s’agisse pas d’une fonctionnalité voulue et ne doit pas être invoquée.

J'espère que cela aidera quelqu'un.

5
Vindicar

Je sais que vous avez trouvé une solution à votre question. Je voulais simplement vous recommander de regarder le plugin plus complet suivant jQuery pour les formats de nombres internationaux:

Formateur de numéro international

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

Tu peux essayer ça

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

la sortie est: Rs. 39.00

use jquery.glob.js,
    jQuery.glob.all.js
2
Rajesh Kumar Maurya

Cette fonction devrait fonctionner quels que soient les paramètres régionaux et monétaires:

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('.');
}

Cela suppose que vous connaissiez le caractère décimal (dans mon cas, les paramètres régionaux sont définis à partir de PHP, je l’obtiens donc avec <?php echo cms_function_to_get_decimal_point(); ?>).

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;
}
0
Santosh Bharadwaj
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
Vladislav Kostenko

Ceci est ma fonction. Fonctionne avec toutes les devises.

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

}

Utilisation: toFloat("$1,100.00") ou toFloat("1,100.00$")

0
bycoder