除算を行うと問題が発生します。小数点付きの数値を2、4、67などの整数に切り捨てるのは誰か知りたいのですが。
4 に答える
「int」変数に値を割り当てると、自動的に切り捨てられます。
int c;
c = a/b;
または、次のようにキャストできます。
c = (int) (a/b);
これにより、cがfloatまたはdoubleとして定義されている場合でも切り捨てられます。
通常、切り捨ては最善ではありません(もちろん、何を達成したいかによって異なります)。通常、結果は次のように丸められます。
c= round(a/b,0);
ラウンドが適切に行われるため、よりインテリジェントになります。Linuxを使用している場合は、正確なデータ型などについて「manround」で簡単に参照できます。
trunc()
で定義された関数を使用できますmath.h
。小数部分を削除し、指定された数以下の最も近い整数を返します。
これはそれがどのように定義されるかです:
double trunc(double x);
以下はその使用方法です。
double a = 18.67;
double b = 3.8;
int c = trunc(a/b);
man trunc
Linuxでこの関数の詳細を確認できます。以前の回答で指摘したように、除算結果を整数にキャストするか、整数に割り当てると自動的に切り捨てられますが、その仕事をするC関数について知りたい場合はそれtrunc()
が1つです。
浮動小数点型から整数型に手動または暗黙的にキャストすると、ゼロに向かって自動的に切り捨てられます。積分型が値を格納するのに十分な大きさでない場合、オーバーフローが発生することに注意してください。小数点以下をすべて切り捨てて値を出力する必要がある場合は、次を使用しますprintf()
。
printf("%.0f", floor(float_val));
TõnuSamuelが指摘しているように、そのprintf()
呼び出しは実際にはデフォルトで浮動小数点パラメーターを丸めます。
int result = (int)ceilf(myFloat );
int result = (int)roundf(myFloat );
int result = (int)floor(myFloat);
float result = ceilf(myFloat );
float result = roundf(myFloat );
float result = floor(myFloat);
お役に立てればと思います。