Pergunta

Tem sido um bom tempo desde a última vez utilizado Linguagem de Programação D , e agora eu estou usando-o para algum projeto que envolve cálculos científicos.

Eu tenho um monte de dados de ponto flutuante, mas quando eu imprimi-las usando writefln, eu obter resultados como: 4.62593E-172 que é um zero! Como faço para usar corda formatação% material para imprimir coisas como 0?

Agora eu estou usando um truque:

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

ele faz o trabalho, mas eu quero fazê-lo usando as operações de formatação, se possível.

Atualizar

alguém sugeriu writefln("%.3f", a) mas o problema com ele é que ele imprime zeros extras desnecessárias, ou seja, torna-se 0 0.000 e 1.2 se torna 1.200
Eu posso fazer isso também remover os zeros finais?

Foi útil?

Solução

Resposta curta:. Isto não pode ser feito com especificadores de formato printf

Desde D usa a mesma formatação como vsprintf() do C99, você encontrar a sua resposta neste segmento: Evite zeros em printf ()

Outras dicas

Tente algo como

writefln("%.3f", a);

A resposta de Federico deve trabalhar, para mais informações verifique a href="http://www.digitalmars.com/d/2.0/phobos/std_format.html#format-string" rel="nofollow formato seção especificadores .

Eu vejo que você está usando Phobos, no entanto o que você está tentando fazer é suportado no Tango.

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

imprimirá "1.20"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top