Aller au contenu principal

6. Numbers (Nombres)

La représentation des nombres est similaire à celle utilisée dans la plupart des langages de programmation. Un nombre est représenté en décimal, en utilisant des chiffres décimaux. Il contient une partie entière, qui peut avoir un préfixe de signe moins facultatif, suivie d'une partie fractionnaire et/ou d'une partie exposant facultatives. Les zéros de tête ne sont pas autorisés.

Une partie fractionnaire (Fraction Part) est un point décimal suivi d'un ou plusieurs chiffres.

Une partie exposant (Exponent Part) commence par la lettre E en majuscule ou minuscule, suivie d'un signe plus ou moins facultatif. Le E et le signe facultatif sont suivis d'un ou plusieurs chiffres.

Les valeurs numériques qui ne peuvent pas être représentées dans la syntaxe (comme Infinity et NaN) ne sont pas autorisées.

number = [ minus ] int [ frac ] [ exp ]

decimal-point = %x2E ; .

digit1-9 = %x31-39 ; 1-9

e = %x65 / %x45 ; e E

exp = e [ minus / plus ] 1*DIGIT

frac = decimal-point 1*DIGIT

int = zero / ( digit1-9 *DIGIT )

minus = %x2D ; -

plus = %x2B ; +

zero = %x30 ; 0

Cette spécification permet aux implémentations de définir des limites sur la plage et la précision des nombres acceptés. Étant donné que les logiciels implémentant les nombres IEEE 754-2008 binary64 (double précision) [IEEE754] sont généralement disponibles et largement utilisés, on s'attend à ce que les implémentations qui ne dépassent pas la précision ou la plage fournies par ceux-ci puissent atteindre une bonne interopérabilité, car les implémentations approximeront les nombres JSON dans la précision attendue. Des nombres JSON comme 1E400 ou 3.141592653589793238462643383279 peuvent indiquer des problèmes d'interopérabilité potentiels, car ils suggèrent que le logiciel qui les a créés s'attend à ce que le logiciel récepteur ait des capacités de plage et de précision numériques plus grandes que celles généralement disponibles.

Notez que lors de l'utilisation de tels logiciels, les entiers dans la plage [-(253)+1, (253)-1] sont interopérables, car les implémentations détermineront leurs valeurs numériques de manière entièrement cohérente.