2013-10-24 18 views
25

Я задаюсь следующие точки обозначения чисел с плавающей является ли допустимым JSON обозначения:JSON стандартные - числа с плавающей точкой

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

или если показатель обозначения заменить на десятичной системе счисления?

+0

Следуйте по железнодорожным путям по адресу http://json.org – user2864740

ответ

48

Он действителен в соответствии с форматом, доступным по адресу json.org, поскольку числа могут необязательно иметь показатель основания 10, обозначенный E, прописным или строчным регистром, необязательный плюс или минус и одну или несколько цифр.

image of JSON number format

9

Это вполне допустимо, в соответствии с RFC 4627RFC 7159 *:

Представление чисел аналогична той, которая используется в большинстве языков программирования. Число содержит целочисленный компонент, который может содержать префикс с необязательным знаком «минус», за которым может следовать фракционная часть и/или экспоненциальная часть.

Октальные и шестигранные формы не допускаются. Ведущие нули не допускаются.

Дробная часть представляет собой десятичную точку, за которой следует одна или несколько цифр.

Экспоненциальная часть начинается с буквы E в верхнем или нижнем регистре, , за которой может следовать знак «плюс» или «минус». Знак E и необязательный знак сопровождаются одной или несколькими цифрами.

Числовые значения, которые не могут быть представлены в виде последовательностей цифр (например, Infinity и NaN), не допускаются.

Экспоненты разрешено иметь ведущие 0s, но не раздел целое:

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 информационную памятку, однако грамматика используется остается точно такой же.

5

В то время как из JSON (и JavaScript) в перспективе эти четыре цифрами

а) 100
б) 100.0
с) 1.0E+2
д) 1E+2

лишь четыре способа, чтобы написать точно такое же число, в средах, где целые числа и числа переменных являются разными типами чисел, они могут быть не все эквивалентными.

И хотя (а) ясно означает целое число, и (б) реальное и (в) реальное, случай (d) является немного неоднозначным: например, в C это плавающее число точечный литерал (потому что есть экспонента), но в Аде это число целых чисел (потому что нет десятичной точки).

И в ISO 6093:1985 «Обработка информации – Представления числовых значений в символьных строках для обмена информации», последний из которых является недействительным, а остальные три соответствуют три различимым форматам NR1, NR2 и NR3, определенных там.

Так что в целом — в JSON или в другом месте —, я бы предпочел и рекомендовал всегда включать десятичную точку в «научное» представление десятичной строки с показателем степени.

И поместить хотя бы одну цифру перед десятичной точкой (если таковая имеется), поскольку требуется JSON (и Ada, но не C), а ISO 6093 рекомендует (но не требует).

Просто во избежание недоразумений (среди людей) или проблем обмена данными (среди машин и программ).

Смежные вопросы