6. Numbers (数字)
数字 (number) 的表示方式类似于大多数编程语言中的表示方式. 数字使用十进制数字以基数 10 表示. 它包含一个整数部分 (integer component), 前面可以带有可选的负号 (minus sign), 后面可以跟随小数部分 (fraction part) 和/或指数部分 (exponent part). 不允许前导零.
小数部分是一个小数点 (decimal point) 后跟一个或多个数字.
指数部分以大写或小写字母 E 开始, 后面可以跟随加号 (plus sign) 或负号. 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 (double precision) 数字 [IEEE754] 的软件通常可获得且被广泛使用, 如果实现所预期的精度或范围不超过这些数字所提供的能力, 就可以取得良好的互操作性, 因为实现会在预期精度内近似表示 JSON 数字. 诸如 1E400 或 3.141592653589793238462643383279 这样的 JSON 数字可能表明存在潜在互操作性问题, 因为它暗示创建该数字的软件期望接收软件在数值量级和精度方面具备超过广泛可用能力的支持.
注意, 使用此类软件时, 在 [-(253)+1, (253)-1] 范围内的整数具有互操作性, 因为实现会就其数值精确达成一致.