6. 数字 (Numbers)
numbers 的表示方式类似于大多数 programming languages 中使用的方式. number 使用 decimal digits 以 base 10 表示. 它包含 integer component, 该 component 可带有可选 minus sign 前缀, 其后可以跟 fraction part 和/或 exponent part. 不允许 leading zeros.
fraction part 是 decimal point 后跟一个或多个 digits.
exponent part 以 uppercase 或 lowercase 字母 E 开始, 后面可以跟 plus 或 minus sign. E 和可选 sign 后跟一个或多个 digits.
下面 grammar 中无法表示的 numeric values (例如 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
本规范允许 implementations 对所接受 numbers 的 range 和 precision 设置限制. 由于实现 IEEE 754 binary64 (double precision) numbers [IEEE754] 的 software 通常可用且广泛使用, 因此如果 implementations 预期的 precision 或 range 不超过其所提供能力, 就可以实现良好 interoperability, 其含义是 implementations 将在预期 precision 内近似 JSON numbers. 诸如 1E400 或 3.141592653589793238462643383279 这样的 JSON number 可能表示潜在 interoperability problems, 因为它表明创建该 number 的 software 期望接收 software 具有比广泛可用能力更高的 numeric magnitude 和 precision.
注意, 使用这类 software 时, 属于 integers 且位于 [-(253)+1, (253)-1] 范围内的 numbers 是可互操作的, 其含义是 implementations 将精确一致地认定其 numeric values.