2016-03-24 5 views
5

浮動小数点数を小数点以下のように印刷する方法を教えてください。 11.00は11として印刷する必要がありますが、11.45は同じままにしてください。問題はif文が多分あるかもしれません。助言がありますか?数値がCの小数点以下の数字を持たない場合はfloatにします

+4

何を試しましたか?そして小数点以下桁数を印刷したい。 「1.124」または7番目の「0.14285714285714285714285714285714」があるとします。 –

+4

'printf("%g \ n "、var);' 'var'は変数の名前です。 –

+0

見よ[ここ](http://stackoverflow.com/a/5913115/3436922) – LPs

答えて

0

は、ここに私のソリューションです:

#include <stdio.h> 

void printDouble(double fp); 

int main(void) 
{ 
    printDouble(11.0); 
    printDouble(11.45); 
} 

void printDouble(double fp) 
{ 
    double _fp; 
    char buffer[40]; 
    int i = 0; 
    do{ 
     sprintf(buffer, "%.*lf", i, fp); 
     sscanf(buffer, "%lf", &_fp); 
     i++; 
    } while(fp != _fp); 
    puts(buffer); 
} 

出力:

11 
11.45 

は、おそらくこれは、やや非効率的ですが、それ作業を行います。とにかく、浮動小数点数を頻繁に出力する必要はありません。

+0

%eは浮動小数点の整数表現を表示せず、科学記法を使用します。 したがって、fp = 100000.0の場合、%gは100000ではなく1.0e + 5を表示します。これは、OPが要求しているものです。 –

+0

'if'文の問題の存在は、問題が関数ではなく手作業で解決されるべきであるという意味があります。 – edmz

+0

@DaveKnight回答が修正されました –

2

私の頭に浮かぶ最初の解決策はキャストされています。 これは私がやることです。 あなたの変数が "a"で、印刷したいとします。

float a; 

    if (if (a-(int)a<0.001 || (int)a-a<0.001)) //1st comment explains this 
     printf("%d", (int)a); 
    else 
     printf("%f", a); 
+0

aが123.000001の場合、これは機能しません。 'if(a-(int)a <0.001 ||(int)a-a <0.001)... ' –

+0

Paulに相談していただきありがとうございます。私はそれを完全に忘れてしまった。 –

関連する問題