У меня есть double x
, который я хотел бы напечатать в виде строки s
. Я хотел бы представление, чтобы соблюдать следующие свойства:Краткая и точная печать двухместных номеров
- Точная: абсолютное значение
(x - atof(s))
составляет менее эпсилон - Сжатый: представление не включает в себя более значащих цифр, чем требуется для быть точным
Каков наилучший способ для этого?
Для того, чтобы проиллюстрировать, почему %f
и %g
не делают работу:
printf("%f\n", 1.0); // 1.000000 not concise
printf("%g\n", 1.0); // 1 good
printf("%f\n", 4357890.2342389); // 4357890.234239 good
printf("%g\n", 4357890.2342389); // 4.35789e+06 not accurate
'% .16g' или что-то подобное ? – cpplearner
@cpplearner Классный, отлично работает. Если вы ответите, я приму это. – dshin
Хотя «% .16g» хорошо работает для моих приведенных выше примеров, он технически не дает моего «краткого» определения для чего-то вроде «1.0/3», если epsilon, скажем, 1e-6. Решение подходит для моих нужд, но я хочу отметить это, если у других есть разные требования. – dshin