web-dev-qa-db-ja.com

JSON標準-浮動小数点数

次の浮動小数点表記が有効なJSON表記かどうか疑問に思っています。

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

または、指数表記を10進表記に置き換える必要がありますか?

41
ThePiachu

json.org で使用可能な形式に従って有効です。これは、数値にオプションでE、大文字または小文字、オプションのプラスまたはマイナス、1つ以上の数字で表される10を底とする指数を含めることができるためです。

image of JSON number format

68
Delan Azabani

によると、それは完全に有効です RFC 4627 RFC 7159 *:

数値の表現は、ほとんどのプログラミング言語で使用されているものと似ています。数値には、オプションのマイナス記号を前に付けることができる整数部分が含まれ、その後に小数部や指数部が続く場合があります。

8進形式および16進形式は使用できません。先行ゼロは許可されません。

小数部は、1つ以上の数字が続く小数点です。

指数部は、大文字または小文字の文字Eで始まり、その後にプラス記号またはマイナス記号が続く場合があります。 Eとオプションの符号の後に1つ以上の数字が続きます。

数字のシーケンスとして表現できない数値(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情報メモに優先しますが、使用される文法はまったく同じままです。

12
Qantas 94 Heavy

JSON(およびJavaScript)の観点からは、これらの4つの数字

a)100
b)100.0
c)1.0E+2
d)1E+2

整数と実数が異なる種類の数値である環境で、まったく同じではないかもしれない、まったく同じ数値を書くための4つの方法です。

(a)は明らかに整数を意味し、(b)実数、(c)実数も同様ですが、ケース(d)は少し曖昧です:たとえば、Cではこれは浮動小数点リテラル(指数があるため)が、Adaでは整数リテラル(小数点がないため)です。

そして ISO 6093:1985 「情報処理-情報交換のための文字列の数値表現」では、最後の1つはinvalid、他の3つは、そこに定義されている3つの識別可能な形式NR1、NR2、およびNR3に対応しています。

そのため、一般的に(JSONまたは他の場所で)、指数を持つ「科学的な」10進数文字列表現に常に小数点を含めることをお勧めします。

また、JSON(およびCではなくAda)が要求し、ISO 6093が推奨する(ただし必須ではない)ため、小数点の前に少なくとも1桁の数字を配置する(ある場合)。

誤解(人間の間)やデータ交換の手間(機械とプログラムの間)を避けるためです。

10
mrtnhfmnn