Question

J'ai vue que les valeurs décimales de sortie qui représentent les types de données d'argent sur la base de données. Pour la sortie, je suis en utilisant le code suivant le formatage

string price = String.Format("{0:f}", (item.Price + item.VAT));

qui produisent une chaîne comme ceci

12,99 (with comma as the decimal separator)

Je suis maintenant en utilisant cette chaîne pour faire un calcul sur le client en utilisant jQuery

elmProductSelected.children("option").each(function(n) {
    var pIdx = $(this).attr("rel"); 
    var pObj = products.eq(pIdx);
    var pValue = $(this).attr("value");
    var valueArray = pValue.split('|');
    var prdId = valueArray[0];
    var pQty = valueArray[1];
    /* the value of pPrice is 12,99 after the following call */
    var pPrice =  $(pObj).attr(attrProductPrice);
    /* I get NaN here! */
    sTotal = sTotal + ((pPrice - 0) * (pQty - 0));
    cProductCount++;
    cItemCount = cItemCount + (pQty-0);
});

Je me fais NaN à droite sur la ligne que je l'ai commenté. Je suppose que cela est dû au fait que la valeur pPrice utiliser la virgule comme séparateur décimal parce que si je mets manuellement comme fonctionne tout 12.99.

Est-il possible de lire le 12,99 comme un numéro en utilisant javascript / jQuery?

Était-ce utile?

La solution

NAN = Pas un nombre

En utilisant parseInt vous pouvez dire que Javascript doit être traité comme un numéro.

var pPrice = parseInt($(pObj).attr(attrProductPrice));

Vous pourriez avoir besoin parseFloat si vous utilisez une décimale.

Autres conseils

Il y a deux problèmes avec le code. Tout d'abord, vous devez jeter la chaîne à flotter, comme Webnet suggère. La fonction parseFloat, cependant, attendre l'argument à utiliser point comme séparateur décimal. Par conséquent, le code suivant va faire ce que vous voulez:

var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));

D'abord, vous remplacez la virgule pour un point, puis convertir le résultat à un flotteur.

Si c'est le seul séparateur virgule, il y aura (pas un séparateur de milliers), puis remplacez juste.

var num = parseInt( str.replace( ',', '.' ) ); // or parseFloat

S'il y a d'autres personnages qui empêcheront l'analyse syntaxique correcte, alors je vous suggère d'avoir un attribut personnalisé qui stocke le nombre undecorated.

<input data-undecorated="123.45" value="123,45" />
var num = parseInt( $('#myInput').data('undecorated') ); // or parseFloat

Vous pouvez utiliser data() comme celui-ci pour obtenir les attributs data- si vous utilisez jQuery 1.4.3 ou plus tard.

essayer cette

var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");

Essayer cette RegEx:

Mise à jour:. Changé l'expression, depuis que je manqué la partie (avec la virgule comme séparateur décimal)

var pPrice = $(pObj).attr(attrProductPrice)..replace(/(,)(\d+)$/, ".$2").replace(",","")

Cela semble lié: Comment convertir chaîne en float en javascript?

Il semble que vous devrez remplacer la virgule décimale avec.

parseFloat ('12, 99'.replace ( ' ''.'))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top