Вопрос

Прошло довольно много времени с тех пор, как я в последний раз использовал 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»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top