コードの簡単な分析は次のとおりです。
int a = 9/5; // 9/5 = 1.8, but since you are doing integer division and storing the value in an integer it will store 1.
printf("%f\n", a);//Using incorrect format specifiers with respect to datatypes, will cause undefined behavior
printf("%d\n",a);//This should print 1. And correct.
または、フロートが必要な場合:
int
使用する代わりにfloat
:
float a=9.0f/5;//This will store 1.800000f
//float a=9/5 will store 1.000000 not, 1.8 because of integer divison
printf("%f\n",a); //This will print 1.800000
浮動小数点の仕組みについては、 http: //en.wikipedia.org/wiki/IEEE_754-2008もお読みください。
整数除算に関する説明:
C99:
6.5.5 乗法演算子
6
整数が除算されると、/
演算子の結果は小数部分が破棄された代数商になります。88)商a/b
が表現可能な場合、式(a/b)*b + a%b
は次のようになります。a
88)これはしばしば「ゼロに向かう切り捨て」と呼ばれます。