"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo preservar ceros de arrastre al marcar flotadores en Go Json?

¿Cómo preservar ceros de arrastre al marcar flotadores en Go Json?

Publicado el 2025-03-25
Navegar:153

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

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)
}
Último tutorial Más>

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