печать чисел с плавающей запятой в D
Вопрос
Прошло довольно много времени с тех пор, как я в последний раз использовал D Язык программирования, и теперь я использую его для какого-то проекта, связанного с научными расчетами.
У меня есть куча данных с плавающей запятой, но когда я печатаю их с помощью writefln
, я получаю такие результаты: 4.62593E-172
что это ноль!Как мне использовать % форматирования строк для печати таких значений, как 0?
Сейчас я использую хак:
if( abs(a) < 0.0000001 )
writefln(0);
else
writefln(a);
он выполняет свою работу, но я хочу сделать это, используя операции форматирования, если это возможно.
ОБНОВЛЯТЬ
кто-то предложил writefln("%.3f", a)
но проблема в том, что он печатает ненужные лишние нули, т.е. 0
становится 0.000
и 1.2
становится 1.200
Могу ли я сделать так, чтобы он также удалял конечные нули?
Решение
Короткий ответ:Это невозможно сделать с помощью спецификаторов формата printf.
Поскольку D использует то же форматирование, что и C99. vsprintf()
, вы найдете ответ в этой теме: Избегайте конечных нулей в printf()
Другие советы
Попробуйте что-нибудь вроде
writefln("%.3f", a);
Ответ Федерико должен сработать, для получения дополнительной информации проверьте спецификаторы формата раздел.
Я вижу, что вы сейчас используете Phobos, однако то, что вы пытаетесь сделать, поддерживается в Tango.
Stdout.formatln("{:f2}", 1.2);
напечатает «1.20»