печать чисел с плавающей точкой в ​​D - PullRequest
2 голосов
/ 01 декабря 2008

Прошло довольно много времени с тех пор, как я в последний раз использовал D Язык программирования , и теперь я использую его для какого-то проекта, который включает научные расчеты.

У меня есть куча данных с плавающей запятой, но когда я печатаю их, используя writefln, я получаю результаты вроде: 4.62593E-172, что равно нулю! Как использовать форматирование строки% stuff для печати таких вещей, как 0?

Прямо сейчас я использую хак:

    if( abs(a) < 0.0000001 )
        writefln(0);
    else
        writefln(a);

это делает работу, но я хочу сделать это, используя операции форматирования, если это возможно.

UPDATE

кто-то предложил writefln("%.3f", a), но проблема в том, что он печатает ненужные лишние нули, то есть 0 становится 0.000 и 1.2 становится 1.200
Можно ли сделать так, чтобы он также удалял завершающие нули?

Ответы [ 4 ]

5 голосов
/ 01 декабря 2008

Краткий ответ: Это невозможно сделать с помощью спецификаторов формата printf.

Поскольку D использует то же форматирование, что и в C99 vsprintf(), вы найдете ответ в этой теме: Избегайте конечных нулей в printf ()

2 голосов
/ 01 декабря 2008

Попробуйте что-то вроде

writefln("%.3f", a);
1 голос
/ 01 декабря 2008

Ответ Федерико должен работать, для получения дополнительной информации проверьте спецификаторы формата раздел.

0 голосов
/ 01 декабря 2008

Я вижу, что вы сейчас используете Phobos, однако то, что вы пытаетесь сделать, поддерживается в Tango.

Stdout.formatln("{:f2}", 1.2);

напечатает "1.20"

...