문제
내가 마지막으로 사용한 지 꽤 오랜 시간이 지났어 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"을 인쇄합니다.
제휴하지 않습니다 StackOverflow