JSON标准 - 浮点数

时间:2013-10-24 00:50:36

标签: json floating-point standards exponent

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

"result":{"base_fee":1e-005}

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

3 个答案:

答案 0 :(得分:63)

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

image of JSON number format

答案 1 :(得分: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

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

答案 2 :(得分: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建议(但不要求)。

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