1.0/3*3 c语言的问题

本人为初学者 有点想不明白
#include <stdio.h>

void main()
{
printf("%f\n",1.0/ 3 * 3);
}
按照网上的说法是算出0.999999 但我用VISUAL C++运行得出的是1.000000 这是为什么????

这个问题是关于不同类型数据间混合运算的问题,
由于1.0是浮点型,所以在计算时,“1.0,3”被转换为double型,即得到的结果是double型
得到的结果是0.999999999999999,有 15位有效数字
在输出时,用%f格式,只输出6位有效数字,所以结果输出1.000000
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-18
对呀,确实是这样的 因为浮点数的精度是这个
1.0是浮点数,精度是小数点后6位。
所以1.0/3是0.333333,然后乘以3就是0.999999。
这个题目考查的是大家对各种数据类型精度的理解
满意请采纳。追问

这我明白 我不懂的是为什么我家电脑运算出来的是1.000000而不是0.999999

第2个回答  2014-08-18
c在64位和32位的操作系统下得到的数据时不同 %f表示单精度浮点数 保留小数点后面6位数
第3个回答  2014-08-18
会四舍五入,例如程序改为
#include <stdio.h>

void main()
{
printf("%f\n",0.999999999999);
}
输出的依然是1追问

那么为什么网上其他人运行却是0.9999999呢?不是会四舍五入吗?

追答

你试试%lf应该没问题的,或者不改变%f输出,但是把1·0改为1·0f。因为你这里用%f输出,实际计算机做了类型转换。double以float输出,精度丢失。

第4个回答  2014-08-18
答案应该是“1.000000”会四舍五入。