我想知道以下浮点表示法是否是有效的 JSON 表示法:
"result":{"base_fee":1e-005}
还是应该用十进制表示法替换指数表示法?
我想知道以下浮点表示法是否是有效的 JSON 表示法:
"result":{"base_fee":1e-005}
还是应该用十进制表示法替换指数表示法?
根据json.org上可用的格式,它是有效的,因为数字可以有一个以 E、大写或小写字母表示的以 10 为底的指数,可选的加号或减号,以及一个或多个数字。
从 JSON(和 JavaScript)的角度来看,这四个数字
a) 100
b) 100.0
c) 1.0E+2
d)1E+2
只是写完全相同数字的四种方法,在整数和实数是不同类型的数字的环境中,它们可能并不都等价。
虽然 (a) 明确表示整数,(b) 表示实数,(c) 也表示实数,但情况 (d) 有点模棱两可:例如,在 C 中这是一个浮点字面量(因为有一个指数),但在 Ada 中它是一个整数文字(因为没有小数点)。
而在ISO 6093:1985《信息处理——信息交换字符串中数值的表示》中,最后一个是无效的,而其他三个对应于其中定义的三种可区分格式NR1、NR2和NR3。
所以一般来说——在 JSON 或其他地方——我更喜欢并建议总是在带有指数的“科学”十进制字符串表示中包含一个小数点。
并且在小数点前至少放置一位数字(如果有的话),因为 JSON(和 Ada,但不是 C)要求和 ISO 6093 建议(但不是要求)。
只是为了避免误解(在人类之间)或数据交换麻烦(在机器和程序之间)。
这是完全有效的,根据RFC 4627 RFC 7159 *:
数字的表示类似于大多数编程语言中使用的表示。一个数字包含一个整数部分,它可以以可选的减号为前缀,其后可以是小数部分和/或指数部分。
不允许使用八进制和十六进制形式。前导零是不允许的。
小数部分是小数点后跟一位或多位数字。
指数部分以大写或小写字母 E 开头,后跟一个加号或减号。E 和可选符号后跟一个或多个数字。
不允许使用不能表示为数字序列的数值(例如 Infinity 和 NaN)。
指数可以有前导 0,但整数部分不能:
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
* RFC 7159 标准取代了 RFC 4627 信息备忘录,但使用的语法保持完全相同。