C言語で小数→整数への丸めをするとき、floor関数とint型へのキャストで結果が違うことに最近気づきました。
正の値であれば同じなんですが、負の値だと異なる結果となります。
#include<stdio.h> #include<math.h> int main() { double val[] = {.5, 1.5, -.5, -1.5}; for(int t=0; t<sizeof(val)/sizeof(double); t++) { printf("val=%5.1f (int)val=%3d floor(val)=%3.0f\n", val[t], (int)val[t], floor(val[t])); } } |
floor関数は数値が小さい整数に、キャストは絶対値が小さい整数に丸めが行われます。
なお、floor関数の戻りはdoubleのままです。
切り捨てとして期待する処理は一般的にどちらなのでしょうか。