문제

내가 마지막으로 사용한 지 꽤 오랜 시간이 지났어 D 프로그래밍 언어, 그리고 지금은 과학적 계산과 관련된 일부 프로젝트에 사용하고 있습니다.

부동 포인트 데이터가 많이 있지만 사용하는 인쇄 할 때 writefln, 나는 다음과 같은 결과를 얻습니다. 4.62593E-172 그것은 0입니다! 문자열 서식 % 항목을 사용하여 0과 같은 물건을 인쇄하려면 어떻게해야합니까?

지금은 해킹을 사용하고 있습니다.

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

작업을 수행하지만 가능한 경우 서식 작업을 사용하여 수행하고 싶습니다.

업데이트

누군가 제안했다 writefln("%.3f", a) 그러나 그것의 문제는 그것이 불필요한 여분의 0을 인쇄한다는 것입니다. 0 becomes 0.000 그리고 1.2 becomes 1.200
후행 0을 제거 할 수 있습니까?

도움이 되었습니까?

해결책

짧은 답변 : Printf 형식 지정자로는 수행 할 수 없습니다.

D는 C99와 동일한 형식을 사용하기 때문에 vsprintf(), 당신은이 스레드에서 당신의 답을 찾습니다. printf ()의 후행 0을 피하십시오.

다른 팁

같은 것을 시도하십시오

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

Federico의 답변은 효과가 있어야합니다. 자세한 내용은 형식 지정자 부분.

나는 당신이 현재 Phobos를 사용하고 있다는 것을 알지만, 당신이하려는 것은 Tango에서 지원됩니다.

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

"1.20"을 인쇄합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top