Preserve ceros de fin de semana en JSON Massaled Floting-Point Numbers
en Go, la función json.marshal () a menudo elimina ceros de los ceros de los números de puntos flotantes durante el mariscal. Esto puede conducir a la pérdida de precisión en ciertos escenarios.
Problema:
al reunir el valor de un programa GO con un cero inaugural (por ejemplo, 40.0), json.marshal () genera el valor sin el cero (e.g., 40). Este comportamiento puede ser problemático si los programas externos esperan números de punto flotante con ceros de finalización.
Solución 1 (recomendado): use un tipo de flotación personalizado
Definir un tipo de flotación personalizado e implementar el método marshaljson () para controlar la serialización JSON. Aquí hay un ejemplo:
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 }
En este tipo personalizado, el método Marshaljson () convierte el flotador en una cadena con un lugar decimal (si es un número completo) o preserva todos los lugares decimales (si no es un número completo).
Ejemplo: struct struct. Valor keepzero Cadena de unidades } func Main () { Data, err: = json.marshal (pt {valor: 40.0, unidad: "some_string"}) fmt.println (string (datos), err) }
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) }
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3