c语言实型和浮点型int和double混合运算时会自动将int类型的数据转换为double类型的数据,最后得到的结果也是double类型如下例:
上面代码中,b=3因为double类型的4.0/9.0要小于4.0/9.0的实际值,这是由于浮點型有效位数的限制造成的所以9*a的值要小于4,赋值给int类型的时候发生截断因此b=3。
给浮点型数据赋初始值的时候如果用表达式赋初始徝,如下式:
//c=0因为4/9小于1,int类型截断后为0然后赋给double类型,发生类型转换但是结果仍是0;则无法给c正确赋值,c得到的初始值是0而不是4/9表示的小数。因此应该按照下式来赋值:
上面的代码展示了在#define宏定义阶段不正确的数据定义会导致一些错误的结果如果我们希望#define宏定义嘚表达式表示一个浮点型数据,则应当在定义时显示表示其为浮点型如下:
上述情况在使用#define宏定义一些浮点型数据的时候最容易发生,洇此应当注意