Qu'est-ce que le séparateur décimal symbole en JavaScript?
Une pensée m'a frappé, j'ai écrit un bout de code JavaScript qui a traité certaines valeurs à virgule flottante. Qu'est-ce que le point décimal symbole en JavaScript? Est-il toujours .
? Ou est-il de la culture spécifique? Et que dire de .toFixed()
et .parseFloat()
? Si je suis de traitement d'une entrée de l'utilisateur, il est susceptible d'inclure la culture locale spécifique symbole du séparateur décimal.
En fin de compte, j'aimerais écrire un code qui prend en charge les deux points décimaux dans la saisie de l'utilisateur - culture et .
, mais je ne peux pas écrire un tel code si je ne sais pas ce que JavaScript attend.
Ajouté: OK, Rubens Farias suggère à regarder question similaire qui a soigné accepté réponse:
function whatDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
C'est gentil, cela me permet d'obtenir les paramètres régionaux du point décimal. Une étape vers la solution, sans aucun doute.
Maintenant, la partie restante serait de déterminer quel est le comportement de .parseFloat()
est. Plusieurs réponses soulignent que pour virgule flottante littéraux seulement .
est valide. Ne .parseFloat()
agir de la même façon? Ou peut-il exiger que le local séparateur décimal dans certains navigateur? Existe-il des méthodes différentes pour l'analyse des nombres à virgule flottante ainsi? Dois-je déployer mes propres juste pour être sûr?
- pour ce que vous faites, je voudrais examiner à l'aide de l'unaire (+) de l'opérateur au lieu de
parseFloat()
. Il sera beaucoup plus facile lors de la validation de la saisie. Voir ma réponse mis à jour.
Vous devez vous connecter pour publier un commentaire.
Selon le cahier des charges, un DecimalLiteral est défini comme:
et pour satisfaire les parseFloat argument:
Donc numberString devient le plus long préfixe de trimmedString qui répond à la syntaxe d'un StrDecimalLiteral, la première parseable chaîne littérale nombre qu'il trouve dans l'entrée. Seul le
.
peut être utilisé pour spécifier un nombre à virgule flottante. Si vous êtes à accepter des entrées à partir de différents endroits, utiliser une chaîne de remplacement:La fonction utilise l'opérateur unaire au lieu de parseFloat, car il me semble que vous voulez être strict sur l'entrée.
parseFloat("1ABC")
serait1
, tandis que l'utilisation de l'opérateur unaire+"1ABC"
retourneNaN
. Cela le rend BEAUCOUP plus facile pour valider la saisie. À l'aide de parseFloat est juste deviner que l'entrée est dans le bon format..parseFloat()
doivent en faire de même?parseFloat("1,01")
de tout jeu sera de retour1
, pas1.01
utilisation:
pour obtenir une chaîne formatée correctement avec le droit de décimales et de milliers de séparateurs
.
. Mais est.
la seule chose qui.parseFloat()
attend?Autant que je suis au courant, javascript lui-même ne sait que sur le
.
séparateur de décimales. Au moins une personne dont le jugement en qui j'ai confiance sur JS choses est d'accord:http://www.merlyn.demon.co.uk/js-maths.htm#DTS
.toLocaleString()
méthode mentionnée par jspcal. Étudier la suite pour savoir quels sont vos décimal et le séparateur des milliers sont. Exécuter tous les numéros affichés à l'utilisateur au travers d'une fonction qui applique ces séparateurs (voir le lien que j'ai donné pour les exemples).