#include
int main() {
float b = 0.58;
int a;
a = (int)(b * 100);
printf("%f , %d
", b*100, a);
getchar();
return 0;
}
输出结果为
a 在强制转换的时候,直接保留整数部分时,得到57,少了1
将b的值改为0.01时,
输出结果如下,
很奇怪,输出为1.000000, 而强制转换保留整数部分时竟然得到的是0
放大%f 的输出格式 改为%.10f ,输出10位,结果如下
虽然float类型能够表示的位数是6到7位, 但是足以说明浮点数在计算机中的表示是不准确的
尤其在float 转 int时, 更加应该注意, 如果想四舍五入,在浮点数加上0.5以后,再进行强制转换
以下参考http://www.cnblogs.com/tekson/archive/2009/07/16/1524604.html
以下参考http://www.cnblogs.com/Xiao_bird/archive/2010/03/26/1696908.html
printf格式串中的%f到底是float还是double?实验来证明!最近在CSDN上看到一个网友写下了类似如下代码,想以小数格式输出一个整数:int a =0, b =0; printf("%f, %d", a, b);可是运行结果并不尽如人意,%f字段输出了0,%d字段输出一个较大的数据。
实验三,检查printf读取float类型数据float a=0.0f; int b=5; printf("%f,%d
", a, b);输出结果: 0.0,5 结论:float类型只占4个字节的数据,但前面实验一已经证明%f会读8个字节,即double类型的宽度,所以,编译器在将float类型参数入栈的时候,事先转换成了double类型。
实验四,再次证明实验三的结论float a=0.0f; int b=5; printf("%d,%d,%d
", a, b);输出结果: 0,0,5 结论:a在入栈的时候,占了8个字节。