convertir une variable de chaîne JavaScript en décimal / argent

114

Comment pouvons-nous convertir une variable de chaîne JavaScript en décimal?

Existe-t-il une fonction telle que:

parseInt(document.getElementById(amtid4).innerHTML)
Varada
la source

Réponses:

240

Oui - parseFloat.

parseFloat(document.getElementById(amtid4).innerHTML);

Pour la mise en forme des nombres, utilisez toFixed:

var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);

num est maintenant une chaîne avec le nombre formaté avec deux décimales.

seul jour
la source
1
Pouvons-nous faire cette variable avec 2 décimales telles que 120,50? en ce moment, je reçois seulement 120,5.
Varada
16
Pour citer @PhilipWhitehouse "S'il vous plaît, à toute personne lisant ceci à l'avenir, n'utilisez pas le flottant pour stocker la devise. Vous perdrez la précision et les données. Vous devez le stocker sous forme de nombre entier de centimes (ou centimes, etc.), puis convertir avant à la sortie. ". Source: stackoverflow.com/questions/149055/…
SSH ce
@SSHThis Autant que je sache, JavaScript n'a pas de type entier. Il n'a qu'un type Number qui sont tous stockés en interne sous forme de nombres à virgule flottante 64 bits. Votre point est valable pour les autres langages qui ont des types entiers tels que C #, C ++, mais pas vraiment pour JavaScript.
Simon Brangwin
1
@SimonBrangwin Son argument est toujours valable, mais la sémantique peut prêter à confusion. Ce qu'il veut vraiment dire, c'est "stocker uniquement les devises sous forme de nombres entiers en javascript puisqu'ils seront stockés sous forme de nombres à virgule flottante".
Josh Noe
1
Juste un rappel: parseFloat('22w')est 22et parseFloat('w22')estNaN
IG Pascual
65

Vous pouvez également utiliser le Numberconstructeur / fonction (pas besoin de base et utilisable à la fois pour les entiers et les flottants):

Number('09'); /=> 9
Number('09.0987'); /=> 9.0987

Alternativement, comme Andy E l'a dit dans les commentaires, vous pouvez utiliser +pour la conversion

+'09'; /=> 9
+'09.0987'; /=> 9.0987
KooiInc
la source
Ce n'est pas pris en charge par IE11
Pantalon
@Pants, il s'agit d' extensions de l'objet intégré Number dans ES6 , pas de pouvoir utiliserNumber
KooiInc
11

Cela marche:

var num = parseFloat(document.getElementById(amtid4).innerHTML, 10).toFixed(2);
Sanjay
la source
2

Il est assez risqué de s'appuyer sur des fonctions javascript pour comparer et jouer avec les nombres. En javascript (0,1 + 0,2 == 0,3) renverra faux en raison d'erreurs d'arrondi. Utilisez la bibliothèque math.js.

Dondrzzy
la source
1

Un moyen simple et rapide serait d'utiliser + x Il garde le signe intact ainsi que les nombres décimaux. L'autre alternative est d'utiliser parseFloat (x). La différence entre parseFloat (x) et + x est pour une chaîne vide + x renvoie 0 où comme parseFloat (x) renvoie NaN.

Tushar Sagar
la source
1

J'ai créé une petite fonction d'aide pour faire cela et attraper toutes les données mal formées

function convertToPounds(str) { 
    var n = Number.parseFloat(str);
    if(!str || isNaN(n) || n < 0) return 0;
    return n.toFixed(2);
}

La démo est

Sidonaldson
la source