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? p>
7 Réponses :
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
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.
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)
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]);
Comment ça va travailler pour des nombres variables de milliers de séparateurs?
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));
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); }
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); }
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. P>
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. P>
Je ne sais pas si ceci est une chose de culture, c'est un
, code> 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)?