¿Cómo se convierte un float64 en un int en Go? Sé que el strconv
paquete se puede usar para convertir cualquier cosa hacia o desde una cadena, pero no entre tipos de datos donde uno no es una cadena. Sé que puedo usar fmt.Sprintf
para convertir cualquier cosa en una cadena y luego strconv
al tipo de datos que necesito, pero esta conversión adicional parece un poco torpe, ¿hay una mejor manera de hacer esto?
124
int(Round(f))
para establecer un float64 en un int. Consulte stackoverflow.com/a/62753031/12817546 .float64(i)
para establecer un int en un float64. Consulte stackoverflow.com/a/62737936/12817546 .Respuestas:
fuente
Simplemente convertir a un int trunca el flotante, que si su sistema representa internamente 2.0 como 1.9999999999, no obtendrá lo que espera. Las diversas conversiones de printf tratan con esto y redondean adecuadamente el número al convertir. Entonces, para obtener un valor más preciso, la conversión es aún más complicada de lo que podría esperar al principio:
Código en Go Playground
fuente
Si es simplemente de float64 a int, esto debería funcionar
Salidas:
Aquí está el código en el patio de recreo: https://play.golang.org/p/HmFfM6Grqh
fuente
Puede utilizar la
int()
función para convertirfloat64
datos de tipo aint
. Del mismo modo, puede utilizarfloat64()
Ejemplo:
fuente
Es probable que se desee un redondeo correcto.
Por lo tanto, math.Round () es tu amigo rápido (!). Los enfoques con fmt.Sprintf y strconv.Atois () fueron 2 órdenes de magnitud más lentos según mis pruebas con una matriz de valores float64 que estaban destinados a convertirse en valores int redondeados correctamente.
math.Round () devuelve un valor float64 pero con int () aplicado después, no pude encontrar ninguna discrepancia hasta ahora.
fuente