> 백엔드 개발 > Golang > Go JSON에서 부동 소수점을 마샬링할 때 후행 0을 유지하는 방법은 무엇입니까?

Go JSON에서 부동 소수점을 마샬링할 때 후행 0을 유지하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-24 06:12:10
원래의
963명이 탐색했습니다.

How to Preserve Trailing Zeros When Marshaling Floats in Go JSON?

JSON 마샬링된 부동 소수점 숫자에서 후행 0 유지

Go에서 json.Marshal() 함수는 종종 부동 소수점 숫자에서 후행 0을 제거합니다. - 마샬링 중 포인트 번호. 이로 인해 특정 시나리오에서 정밀도가 손실될 수 있습니다.

문제:

Go 프로그램의 값을 후행 0(예: 40.0)으로 마샬링하는 경우 json.Marshal ()는 0이 없는 값(예: 40)을 출력합니다. 외부 프로그램이 후행 0이 있는 부동 소수점 숫자를 예상하는 경우 이 동작은 문제가 될 수 있습니다.

해결책 1(권장): 사용자 정의 부동 소수점 유형 사용

사용자 정의 부동 소수점 정의 JSON 직렬화를 제어하려면 MarshalJSON() 메서드를 입력하고 구현하세요. 예는 다음과 같습니다.

type KeepZero float64

func (f KeepZero) MarshalJSON() ([]byte, error) {
    if float64(f) == float64(int(f)) {
        return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil
    }
    return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil
}
로그인 후 복사

이 사용자 정의 유형에서 MarshalJSON() 메서드는 부동 소수점 자리를 소수 자릿수가 1개인 문자열로 변환하거나(정수인 경우) 모든 소수 자릿수를 보존합니다(정수가 아닌 경우). 전체 number).

예:

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{Value: 40.0, Unit: "some_string"})
    fmt.Println(string(data), err)
}
로그인 후 복사

이 코드는 {"Value":40.0,"Unit":"some_string"} 을 출력합니다. JSON 출력의 후행 0입니다.

위 내용은 Go JSON에서 부동 소수점을 마샬링할 때 후행 0을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿