Zum Hauptinhalt springen

6. Numbers (Zahlen)

Die Darstellung von Zahlen ist ähnlich der in den meisten Programmiersprachen verwendeten. Eine Zahl wird in Basis 10 unter Verwendung von Dezimalziffern dargestellt. Sie enthält eine ganzzahlige Komponente, der optional ein Minuszeichen vorangestellt werden kann, gefolgt von einem optionalen Bruchteil und/oder einem Exponententeil. Führende Nullen sind nicht erlaubt.

Ein Bruchteil ist ein Dezimalpunkt gefolgt von einer oder mehreren Ziffern.

Ein Exponententeil beginnt mit dem Buchstaben E in Groß- oder Kleinschreibung, dem optional ein Plus- oder Minuszeichen folgen kann. Dem E und dem optionalen Vorzeichen folgen eine oder mehrere Ziffern.

Numerische Werte, die in der unten stehenden Grammatik nicht dargestellt werden können (wie Infinity und NaN), sind nicht zulässig.

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

Diese Spezifikation erlaubt es Implementierungen, Grenzen für den Bereich und die Präzision akzeptierter Zahlen festzulegen. Da Software, die IEEE 754 binary64 (doppelte Genauigkeit) Zahlen [IEEE754] implementiert, allgemein verfügbar und weit verbreitet ist, kann eine gute Interoperabilität durch Implementierungen erreicht werden, die nicht mehr Präzision oder Bereich erwarten als diese bieten, in dem Sinne, dass Implementierungen JSON-Zahlen innerhalb der erwarteten Präzision approximieren werden. Eine JSON-Zahl wie 1E400 oder 3.141592653589793238462643383279 kann auf potenzielle Interoperabilitätsprobleme hinweisen, da sie darauf hindeutet, dass die Software, die sie erstellt hat, erwartet, dass die empfangende Software größere Fähigkeiten für numerische Größe und Präzision hat, als allgemein verfügbar ist.

Beachten Sie, dass bei Verwendung solcher Software Zahlen, die ganze Zahlen sind und im Bereich [-(253)+1, (253)-1] liegen, in dem Sinne interoperabel sind, dass Implementierungen sich genau über ihre numerischen Werte einig sein werden.