6. Numbers (数字)
数字的表示类似于大多数编程语言中使用的表示。数字以十进制表示,使用十进制数字。它包含一个整数部分,可以带有可选的负号前缀,后面可以跟小数部分和/或指数部分。不允许前导零。
小数部分 (Fraction Part) 是小数点后跟一个或多个数字。
指数部分 (Exponent Part) 以大写或小写字母E开头,后面可以跟加号或减号。E和可选符号后跟一个或多个数字。
不允许使用语法中无法表示的数值(如Infinity和NaN)。
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
本规范允许实现对接受的数字的范围和精度设置限制。由于实现IEEE 754-2008 binary64(双精度)数字 [IEEE754] 的软件通常可用且广泛使用,期望不超过这些提供的精度或范围的实现可以实现良好的互操作性,因为实现将在预期精度内近似JSON数字。像1E400或3.141592653589793238462643383279这样的JSON数字可能表明潜在的互操作性问题,因为它表明创建它的软件期望接收软件具有比广泛可用的更大的数值范围和精度能力。
请注意,当使用此类软件时,在范围 [-(253)+1, (253)-1] 内的整数是可互操作的,因为实现将完全一致地确定它们的数值。