Я работал над некоторыми тестами со словарями, для этого я распечатывал значения Float64, которые я хочу, из базы данных в формате, чтобы скопировать и вставить их в мой массив struct test, но когда мои тесты не прошли, я заметил, что значения отличаются, но только на 0.0000000000002
Затем, чтобы проверить значение, я записал в цикле следующее:
fmt.Printf("%f\n",value)
fmt.Println(value)
И я вернул следующие значения:
702.200000
702.1999999999998
5683.090000
5683.089999999998
975.300000
975.3
Я проверил документы и не увидел ничего, что указывало бы, что есть специальная запись для Float64 или что% f заменит Float64 для Float32, однако, я не получаю проблему, когда использую %v
или %g
и в документах указано, что они будут использовать %f
в случае необходимости.
У меня не возникает проблемы, когда я задаю точность 12 с использованием %.12f
, но в документации не указана точность по умолчанию.
Почему это происходит?
РЕДАКТИРОВАТЬ: Это та же проблема, что и дубликат, но я думаю, что объяснение Адриена по этому поводу более подробно.