2017-01-11 6 views
-1

私は達成するプログラムを持っていますが、まだ少し問題があります。 私は可変float精度でdoubleを出力する必要があります。 私が実際に行う方法をされている場合:小さな問題は、それが最後の番号の後に0を出力することであるPrintf可変精度とゼロの隠蔽

int main(void) 
{ 
    int digits = 4; 
    printf("%0.*f\n", digits, 0.123456789); 
    printf("%0.*f\n", digits, 5.9); 

return 0; 
} 

、それを示すために、ここで私が得るものです:

0.1234 
5.9000 

そしてここにはあります私が欲しいもの:

0.1234 
5.9 

アイデアはありますか?あなたが代わりに%f%gを使用する必要が

答えて

3

#include <stdio.h> 

int main(void) 
{ 
    int digits = 4; 
    printf("%0.*g\n", digits, 0.123456789); 
    printf("%0.*g\n", digits, 5.9); 

    return 0; 
} 

出力:

0.1235 
5.9 

LIVE DEMO

+0

私はすでにこれを試みたが、それは非常にうまく機能しない、もし私は数字でテストする= 29 私はこの出力を得ました: 1.23456788999999900938180668 –

+2

@ChrisProllsこれは、正確な数値が「0.123456788999999733325449137030518613755702972412109375」であるためです。これは '0.123456789'に最も近い' double '番号です。 – mch

+1

@ ChrisProlls--また、 'double'は29桁の精度を持たないことに注意してください。 –

関連する問題