Как преобразовать float64 в int в Go? Я знаю, что strconv
пакет можно использовать для преобразования чего-либо в строку или из нее, но не между типами данных, которые не являются строкой. Я знаю, что могу fmt.Sprintf
преобразовать что угодно в строку, а затем strconv
в нужный мне тип данных, но это дополнительное преобразование кажется немного неуклюжим - есть ли лучший способ сделать это?
125
int(Round(f))
чтобы установить float64 в int. См. Stackoverflow.com/a/62753031/12817546 .float64(i)
чтобы установить int равным float64. См. Stackoverflow.com/a/62737936/12817546 .Ответы:
источник
Простое приведение к int обрезает число с плавающей запятой, и если ваша система внутренне представляет 2.0 как 1.9999999999, вы не получите того, чего ожидаете. Различные преобразования printf справляются с этим и правильно округляют число при преобразовании. Таким образом, чтобы получить более точное значение, преобразование еще более сложное, чем вы могли сначала ожидать:
Код на игровой площадке Go
источник
Если это просто от float64 до int, это должно работать
Выходы:
Вот код на детской площадке - https://play.golang.org/p/HmFfM6Grqh
источник
Вы можете использовать
int()
функцию для преобразованияfloat64
данных типа в форматint
. Точно так же вы можете использоватьfloat64()
Пример:
источник
Вероятно, потребуется правильное округление.
Поэтому math.Round () - ваш быстрый (!) Друг. Подходы с fmt.Sprintf и strconv.Atois () были на 2 порядка медленнее согласно моим тестам с матрицей значений float64, которые должны были стать правильно округленными значениями int.
math.Round () возвращает значение float64, но после применения int () я пока не смог найти никаких несоответствий.
источник