101 votes

Forcer le point décimal au lieu de la virgule dans la saisie de nombres HTML5 (côté client)

J'ai vu que certains navigateurs localisent l'élément input type="number" la notation des nombres.

Désormais, dans les champs où mon application affiche les coordonnées de longitude et de latitude, j'obtiens des choses comme "51,983" alors que ce devrait être "51,982559". Ma solution de contournement consiste à utiliser input type="text" à la place, mais j'aimerais utiliser l'entrée numérique avec un affichage correct des décimales.

Existe-t-il un moyen de obliger les navigateurs à utiliser un point décimal dans la saisie du nombre, indépendamment des paramètres locaux côté client ?

(Il va sans dire que dans mon application, je corrige de toute façon cela du côté serveur, mais dans ma configuration, j'ai également besoin que ce soit correct du côté client (à cause de certains JavaScript)).

Merci d'avance.

UPDATE À l'heure actuelle, en vérifiant dans Chrome Version 28.0.1500.71 m sur Windows 7, l'entrée des nombres n'accepte pas les décimales formatées avec une virgule. Les suggestions proposées avec le step Les attributs ne semblent pas fonctionner.

http://jsfiddle.net/AsJsj/

0 votes

Avez-vous trouvé une solution ? Je rencontre presque le même problème avec Chrome 11 sous Windows.

0 votes

Pas encore de solution. La meilleure solution est d'éviter cela (et d'utiliser input type="text") jusqu'à ce que le problème soit résolu...

3 votes

On dirait que cela dépend des paramètres locaux de votre navigateur, dans mon chrome je vois la virgule, dans le chrome de mon partenaire je vois le point.

29voto

Peter Points 1782

Avec le étape spécifié à la précision des décimales que vous souhaitez, et l'attribut langue qui est défini comme une locale qui formate les décimales à l'aide de l'attribut période Par exemple, pour prendre des valeurs comme 10,56, c'est-à-dire des nombres à deux décimales, faites ceci :

<input type="number" step="0.01" min="0" lang="en" value="1.99">

Vous pouvez également spécifier le max pour la valeur maximale autorisée.

Modifier Ajouter un langue à l'élément input avec une valeur locale qui formate les décimales avec un point au lieu d'une virgule.

35 votes

Cela ne fonctionne toujours pas :-( Les valeurs locales côté client transforment toujours le point décimal en virgule décimale, indépendamment du pas ou de l'attribut de valeur :-(

15 votes

Si je comprends bien, la question n'est pas d'avoir un séparateur décimal. La question est d'avoir '.' au lieu de ',' quand la locale du client préfère ','.

0 votes

Quel que soit le séparateur décimal que vous utilisez dans l'attribut step - le navigateur le localisera toujours. Autrement dit, avec l'exemple que vous avez donné, dans la plupart des pays européens, le nombre affiché serait 10,56.

14voto

Halil Özgür Points 5486

Selon le spec Vous pouvez utiliser any comme la valeur de step attribut :

<input type="number" step="any">

6voto

Matty K Points 1314

J'ai trouvé un article de blog qui semble expliquer quelque chose de similaire :
HTML5 input type=number et decimals/floats dans Chrome

En résumé :

  • le site step aide à définir le domaine des valeurs valides
  • le défaut step es 1
  • Le domaine par défaut est donc les entiers (entre min y max inclusivement, si elle est donnée)

Je suppose qu'il s'agit d'un conflit avec l'ambiguïté de l'utilisation d'une virgule comme séparateur de milliers par rapport à une virgule comme point décimal, et votre 51,983 est en fait un chiffre étrangement orthographié de 51 000, neuf cent huit trois.

Apparemment, vous pouvez utiliser step="any" pour élargir le domaine à tous les nombres rationnels de l'intervalle, mais je ne l'ai pas essayé moi-même. Pour la latitude et la longitude, j'ai utilisé avec succès :

<input name="lat" type="number" min="-90.000000" max="90.000000" step="0.000001">
<input name="lon" type="number" min="-180.000000" max="180.000000" step="0.000001">

Ce n'est peut-être pas joli, mais ça marche.

0 votes

Dans ce cas, c'est une bonne chose que j'aie écrit un résumé et ensuite extrapolé, hein ?

0 votes

Dans mon cas GeolocationPosition.coords.latitude renvoie parfois un float comme 99.999999999999999 . L'étape d'entrée sera donc : step="0.000000000000001" pour être un required entrée

3voto

VAShhh Points 2675

Pas encore testé, mais essayez d'utiliser l'attribut "step" comme décrit ici :

http://www.w3.org/TR/html-markup/input.number.html#input.number.attrs.step.float

Pour faire quelque chose comme ça :

<input type="number"
       min="0"
       max="999"
       step="0.000001">

1voto

Jason Gennaro Points 20848

D'après ce que je comprends, le HTML5 input type="number retourne toujours input.value en tant que string .

Apparemment, input.valueAsNumber renvoie la valeur actuelle sous la forme d'un nombre à virgule flottante. Vous pouvez l'utiliser pour retourner une valeur de votre choix.

Voir http://diveintohtml5.info/forms.html#type-number

0 votes

Merci, cela pourrait être utile !

0 votes

Ce qui est amusant, c'est que input.value renvoie en fait un nombre canonique avec un point, bien qu'il apparaisse comme un coma. Ça craint de vivre dans un pays européen du tiers monde...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X