11
votes

Culture Sensible Paysfloat Fonction dans JavaScript?

Est-ce que quelqu'un a une suggestion d'écriture de la culture Paysfloat sensible à JavaScript, de sorte que lorsque j'ai une chaîne de 100 000,22 au format de la culture américaine, la fonction Parse Float Retourne 100000.22 tandis que si j'entre 100 000,22 en culture suédoise, il retourne 100 000.22 dans le flotteur?


4 commentaires

Je ne sais pas si ceci est une chose de culture, c'est un , chose.


Comme j'écris une solution pour l'application ASP.NET, j'ai réussi à résoudre mon problème sans écrire une solution personnalisée pour cela. En tant que bibliothèque MSDN fournissant la méthode des extensions de type de base JavaScript, l'une d'entre elles est des extensions de type de numéro qui a des fonctions Localeformat et Parselocale. Ces fonctions fournissent la conversion de / vers le format décimal w.r.t culture. voyez cela comme MSDN.MicRosoft.com/fr- US / Bibliothèque / BB310835 (v = vs.90) .aspx .


De plus, on peut définir la culture du serveur, sinon ces fonctions utiliseront la culture par défaut. Voir ce lien MSDN.MicRosoft.com/en- US / Bibliothèque / BZ9TC508 (v = vs.90) .aspx . Dans mon cas, je dois définir SV-SE, car je dois utiliser la culture suédoise pour former les chiffres.


Duplicaté possible de Comment puis-je Convertir la chaîne en nombre en fonction des paramètres régionaux (en face de .tolocalestring)?


7 Réponses :


3
votes

Ceci est un peu rugueux et prêt, mais cela peut être suffisant, vous permettant de passer des milliers et des séparateurs décimaux:

parseFloatOpts("100.000,22", ',', '.'); //100000.22
parseFloatOpts("100,000.22", '.', ','); //100000.22


1 commentaires

Merci pour votre réponse, je suis capable de résoudre le problème dans ASP.NET. Voir ma réponse ci-dessus dans mon message d'origine.



1
votes
var parse = function(st){
   if(st.indexOf(",") === st.length-3){
      st = st.replace(".", "").replace(",", ".");
   }else{
       st = st.replace(",", "");
   }
   return parseFloat(st, 10)
}

console.log(parse("100,000.22")) // 100000.22
console.log(parse("100.000,22")) // 100000.22
I'm just checking if there is a comma in the 3rd-to-last position. This could be further refined to check if there is a period in the 4th to last position in the case thee is no comma (such as 100.000)

0 commentaires

1
votes

Regarder sur Lonesomday's m'a donné cette pensée:

Vous pouvez également faire: P>

function parse (str)
    var ar = str.split(/\.|,/);  
    return Number(ar[0]+ar[1]+"."+ar[3]);


1 commentaires

Comment ça va travailler pour des nombres variables de milliers de séparateurs?



1
votes

Voici une fonction rugueuse. Il assumera la dernière ponctuation pour indiquer des décimales, qu'il s'agisse d'une virgule, d'une période ou d'un autre caractère dont vous pourriez avoir besoin pour indiquer. Il élimine ensuite les autres ponctuations de l'ensemble du nombre. Retourne ensemble et analyse comme flotteur.

alert(normalizeFloat('12.345,77', [',','.']).toFixed(2));
alert(normalizeFloat('12,345.77', [',','.']).toFixed(2));


0 commentaires

6
votes

J'ai amélioré la fonction Wilcox 'pour gérer les valeurs sans séparateurs.

function parseFloatOpts (str) {

     if(typeof str === "number"){
         return str;
     }

     var ar = str.split(/\.|,/);  

     var value = '';
     for (var i in ar) {
         if (i>0 && i==ar.length-1) {
             value += ".";
         }
         value +=ar[i];
     }
     return Number(value);
}


0 commentaires

0
votes

Besoin de votre groupe actuel et de votre séparateur décimal des informations de culture.

function escapeRegExp(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
    }

function parseFloatOpts(str, groupSeparator, decimalSeparator) {

        if (typeof str === "number") {
            return str;
        }

        var value = str.replace(new RegExp(escapeRegExp(groupSeparator), 'g'), "");
        value = value.replace(decimalSeparator, ".");

        return Number(value);
    }


0 commentaires

0
votes

Si vous pour afficher et / ou analyser des flotteurs (ou des dates ou des devises ou plus) dans différents locaux pour JavaScript, ma recommandation est le globalizejs ( https://github.com/globalizejs/globalize ) bibliothèque.

C'est un peu difficile à installer au début (au moins c'était dans mon expérience), mais totalement recommandé pour une gestion correcte de cette question.


0 commentaires