例1)15.4 15.4+0.5は15.9 → 小数点以下を切り捨て → 15 例2)15.5 15.5+0.5は16.0 → 小数点以下を切り捨て → 16・整数型に切り捨てるには、(int) を前に付けて int型にキャスト(強制的型変換)します。
int x1 = (int)( 15.4 + 0.5 ); // x1は 15となる [OK!] int x2 = (int)( 15.5 + 0.5 ); // x2は 16となる [OK!]・負の数でもうまくいくでしょうか? -15.4 を小数点以下第1位で四捨五入すると -15 ですが …
int x3 = (int)( -15.4 + 0.5 ); // x3は-14となる [NG!]
・正なら 0.5 を足し、負なら 0.5 を引く必要がありますね。
たとえば三項演算子 ? : を使って次のようにします。
int newx = (int)( x < 0.0 ? x-0.5 : x+0.5 );
#include <stdio.h>
int shishagonyu( double x )
{
return (int)( x < 0.0 ? x-0.5 : x+0.5 );
}
main()
{
double d;
while( 1 ) {
printf( "浮動小数点数を指定:" );
if( scanf( "%lf", &d ) != 1 ) break;
printf("小数点以下第1位で四捨五入 = %d\n", shishagonyu( d ) );
}
}
(今回のクイズです)
[ 関連記事 ] 切り上げや切り捨て