プロが教えるわが家の防犯対策術!

C言語で、四捨五入するにはどうすればよいのですか?
教えてください。宜しくお願いします。

A 回答 (7件)

#include <stdio.h>


#include <math.h>

int main(void){
double x=5.567789;
double y;

y=floor(x*100+0.5)/100;

printf("x:%f round x:%f\n", x, y);

return 0;
}
    • good
    • 0

ただ、10進2進変換での誤差があるので、完璧を求めるならsprintfで数字列にして四捨五入する必要があります。


例えば、0.025は二進法では無限小数になります。printfしたら0.05と出力される数値でも、コンピュータの内部では0.249999999999999といった値になっています。これを少数以下2桁で四捨五入すると0.02になってしまいます。

このような誤差が許されるなら、mathライブラリのrintを使って、
rint(a*100)/100;
と、簡単に済ませればいいとおもいます。
    • good
    • 0

状況によって手順は変わってきます。


扱いたい数は整数ですか浮動小数点ですか?
負の数を四捨五入することはありますか?
四捨五入したいのはどの桁ですか?

この回答への補足

小数点以下第3桁目で四捨五入して、小数点以下第2桁目までの数値
5,567789
5,57

補足日時:2006/06/11 16:14
    • good
    • 0

double a;


int b;

b=a+0.5; //小数点以下四捨五入
    • good
    • 0

>>2


その手がありましたね。汗
    • good
    • 0

どこを四捨五入するのか分からんが・・・



No1さんに追加
if文を使わなくても

b = a + 5 - a % 10;

でどうでしょ?
    • good
    • 0

int a に対してするとしたら・・・



a + (a % 10 >= 5 ? 10 : 0) - a % 10;

#ただし、負はこれではできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!