9
votes

Comment prévenir l'élimination du point décimal lors de l'analyse JSON?

Si vous le faites ...

var parsed = JSON.parse('{"myNum":0.0}') ;


4 commentaires

JavaScript n'a pas de type de numéro de point entier et flottant distinct. La spécification linguistique indique que la contraction d'un numéro qui n'a aucune fraction à une chaîne déposera le point décimal. Utilisez l'une des méthodes de formatage personnalisées telles que celle de BENSIU suggère.


Quelles différences cela fait-il? 0 est 0.0 est 0.00000000000 ....


@Felix Kling: Oui, je sais que 0 est mathématiquement le même numéro que 0.0 :) mais imaginez une situation dans laquelle un serveur Web sert 0 ou 0,0, en fonction de la manière dont il est stocké dans la base de données (entier ou en tant que flotteur). Et je veux être capable de faire cette distinction dans JavaScript.


En fait, mathématiquement, il y a une différence entre 0 et 0.0 :)


4 Réponses :


1
votes
... parsed.myNum.toFixed( 1 ) ...
where 1 is number of decimal placesEdit: parsed.myNum is number, parsed.myNym.toFixed( 1 ) would be stringEdit2: in this case you need to pass value as string {"myNum":'0.0'} and parsed when calculations is needed or detect decimal separator, parsed number, and use decimal separator position when string is needed

2 commentaires

Désolé, je dois être capable de travailler si le numéro est 0 ou 0.0 . (Ou 0,00 dans cette affaire.) Je veux pouvoir obtenir le numéro avec le nombre correct de chiffres après le point décimal, exactement tel qu'il apparaît dans la chaîne JSON .


C'est votre meilleur pari, mais cela ne vous donnera toujours pas un point décimal pour les chiffres suffisamment grand qu'ils sont normalement affichés dans la notation scientifique. Par exemple. 1e30.Tofixed (1) === '1E30'



7
votes

Si 0,0 n'est pas enfermé dans des guillemets dans votre JSON (c'est-à-dire un numéro et non une chaîne), il n'ya aucun moyen de le distinguer de 0, à moins que vous n'ayez écrit votre propre analyseur JSON.


0 commentaires

0
votes

Cela ne devrait pas avoir d'importance, 00000.00000 est 0 si vous essayez json.parse ('{"mynum": 0.00001}') Vous verrez une valeur de {mynum = 0,0001} Si vous en avez vraiment besoin pour tenir la décimale, vous devez conserver une chaîne json.parse ('{"mynum": "0.0"} ')


1 commentaires

Cela compte en essayant de les faire correspondre à la fois en HTML.



6
votes

Il n'y a aucun moyen d'obtenir le nombre de chiffres de json.parse ou eval . Même si la proposition décimale d'IBM avait été adoptée par le comité de la CAMMAScript, le nombre va toujours être analysé à un flotteur IEEE 754.

Regarde un look A http: //code.google.com/p/json-sans-eval/source/jsonse/trunk/src/json_sans_eval.js Pour un analyseur JSON simple que vous pouvez modifier pour conserver des informations de précision.


1 commentaires

Merci, réponse parfaite. Je vais regarder cet analyseur.