Hola usuario de nuestra página, hallamos la solución a tu búsqueda, has scroll y la obtendrás aquí.
Solución:
Tú nunca perder precisión al convertir de un float
(es decir, float32) a un double
(flotador64). el anterior deber ser un subconjunto de este último.
Tiene más que ver con la precisión predeterminada del formateador de salida.
El IEEE754 más cercano float
a 359.9 es
359.899993896484375
El IEEE754 más cercano double
a 359.9 es
359.8999999999999772626324556767940521240234375
El IEEE754 más cercano double
al 359.899993896484375 es
359.899993896484375
(es decir, es lo mismo, debido a la regla de subconjunto que ya he mencionado).
Entonces puedes ver eso float64(a)
es lo mismo que float64(359.899993896484375)
cual es 359.899993896484375
. Esto explica esa salida, aunque su formateador está redondeando los últimos 2 dígitos.
Esto me ayudó a entender la respuesta de @FaceyMcFaceFace:
var a float32 = math.Pi
fmt.Println(a)
fmt.Println(float64(a))
fmt.Println(float64(math.Pi))
3.1415927
3.1415927410125732
3.141592653589793
https://play.golang.org/p/-bAQLqjlLG
Recuerda algo, que te concedemos glosar si te ayudó.