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