JSON标准 - 浮点数

The*_*chu 42 floating-point standards json exponent

我想知道以下浮点表示法是否是有效的JSON表示法:

"result":{"base_fee":1e-005}
Run Code Online (Sandbox Code Playgroud)

或者指数符号应该用十进制表示法替换?

Del*_*ani 69

它根据json.org上可用的格式有效,因为数字可以选择具有由E,大写或小写,可选的加号或减号以及一个或多个数字表示的基数10指数.

JSON数字格式的图像


Qan*_*avy 12

据说,它完全有效 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
Run Code Online (Sandbox Code Playgroud)

*RFC 7159标准取代了RFC 4627信息备忘录,但使用的语法保持完全相同.


小智 11

虽然从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建议(但不要求).

只是为了避免(人类之间)或数据交换麻烦(机器和程序之间)的误解.