2015-04-12 4 views
2

Есть ли способ печати двойников в c с использованием fprint, чтобы точность печати была наименее возможной (например, чтобы целое число всегда печаталось без десятичных знаков?)Печать удваивается без нулей в конце?

Я знаю, что вы можете сделать что-то вроде Е ("% 0f", номер); Но мне интересно, есть ли способ использовать минимальную точность, которая делает печать точным (всякий раз, когда число может быть выражено конечно в базе 10, конечно).

+2

Что бы ожидать, чтобы быть распечатаны для результата '1.0/3.0' выражения? –

+1

Правда. 1/3.0 может иметь в качестве своего ближайшего 'double' некоторое значение, например' 0.3333333333333333148296162562473909929395' Что вы ожидаете? – chux

+0

Вот почему я сказал только тогда, когда его можно выразить конечно в базе 10. –

ответ

3

Все конечное double, закодированные в базе 10 или основанием 2 (обычной), или основание 16 может быть точно конечно напечатаны в базе 10. DBL_MIN может занять 100+ цифр, чтобы сделать это, но это не бесконечно. printf() не должны выполняться на этом уровне. Таким образом, он заканчивается тем, что является обычным кодом и, конечно же, может «печатать дубликаты без нулей».

Рекомендовать sprintf(buffer, "%.*e", DBL_DECIMAL_DIG - 1, some_double) и обработать буфер, чтобы удалить наименее значащий 0, если необходимо для «близкого» ответа на цель кода.

Ref

Смежные вопросы