# 다음과 같은 json_sample.json 이 있을때,
{
"strval": "ysoftman",
"intval1": -123456789123456789,
"intval2": 123456789123456789,
"intval3": 123456789123456789123456789123456789,
"floatval1": -1.123456789123456789,
"floatval2": 1.123456789123456789123456789,
"floatval3": 1.123456789123456789123456789123456789
}
# JSON number 스펙을 보면 범위에 제한은 없지만
# JSON 을 사용하는 대부분의 프로그램이 IEEE754 64bit 의 범위 제한이 있다.
# golang unmarsahl 하면
IEEE754 64bit 표준에 따라
# 2^64(9223372036854775808 ~ 9223372036854775807) 까지 표시할 수 있다.
# 이 범위를 넘어가면 int 타입은 0, float 타입은 범위 내까지만 표현된다.
{
StrVal: "ysoftman",
IntVal1: -123456789123456789,
IntVal2: 123456789123456789,
IntVal3: 0,
FloatVal1: -1.1234567891234568,
FloatVal2: 1.1234567891234568,
FloatVal3: 1.1234567891234568
}
# jq 도 float 타입은 64bit 범위 까지만 지원한다.
# man jq : jq currently only has IEEE754 double-precision (64-bit) floating point number support
# man jq : jq currently only has IEEE754 double-precision (64-bit) floating point number support
# 하지만 정수형은 지수 형태로 최대한 표현된다.
# jq . ./json_sample.json
{
"strval": "ysoftman",
"intval1": -123456789123456780,
"intval2": 123456789123456780,
"intval3": 1.2345678912345678e+35,
"floatval1": -1.1234567891234568,
"floatval2": 1.1234567891234568,
"floatval3": 1.1234567891234568
}
# javascript JSON.parse() 도 jq 와 같은 결과
floatval1: -1.1234567891234568
floatval2: 1.1234567891234568
floatval3: 1.1234567891234568
intval1: -123456789123456780
intval2: 123456789123456780
intval3: 1.2345678912345678e+35
strval: "ysoftman"
comments:
댓글 쓰기