fmt.Printf ("% f \ n", x) округляет Float64 до Float32, но fmt.Println (x) не делает - PullRequest
0 голосов
/ 16 января 2019

Я работал над некоторыми тестами со словарями, для этого я распечатывал значения 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, но в документации не указана точность по умолчанию.

Почему это происходит?

РЕДАКТИРОВАТЬ: Это та же проблема, что и дубликат, но я думаю, что объяснение Адриена по этому поводу более подробно.

1 Ответ

0 голосов
/ 16 января 2019

Из документов :

Точность по умолчанию для% e,% f и% # g равна 6; для% g это наименьшее количество цифр, необходимое для однозначной идентификации значения.

...