我想知道以下浮点表示法是否是有效的JSON表示法:
"result":{"base_fee":1e-005}
或者指数表示法是否应该用十进制表示法替换?
答案 0 :(得分:63)
根据json.org中可用的格式有效,因为数字可以选择具有由E,大写或小写,可选的加号或减号以及一个或多个数字表示的基数10指数。
答案 1 :(得分:12)
数字的表示与大多数数字的表示相似 编程语言。数字包含整数组件 可以使用可选的减号作为前缀,后面可以是 分数部分和/或指数部分。
不允许使用八进制和十六进制形式。不允许使用前导零。
小数部分是小数点后跟一个或多个数字。
指数部分以大写或小写字母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建议(但不要求)。
只是为了避免(在人类之间)或数据交换麻烦(机器和程序之间)的误解。