发布网友 发布时间:2022-04-22 14:12
共3个回答
热心网友 时间:2023-10-17 15:18
float num=3.14159
float f;
f=((int)(num*10000+0.5))/10000.0;
过程如下 31415.9 +0.5 = 31416.4
取整 31416 然后除以10000.0
隐式转换为float 3.1416
热心网友 时间:2023-10-17 15:19
double pi=3.1415926;
printf("%.4lf\n",pi);
可得输出为3.1416。
printf("%.2lf\n",pi);
可得输出为3.14。追问要求的不是输出,而是程序运行后,f被四舍五入了
热心网友 时间:2023-10-17 15:19
请记住!C语言里面的浮点数几乎都不会是绝对的字面值,而只能是最接近于字面值的数值,存在着误差。
比如在内存里面保存的329.835的真实数值可能就是329.835000001或者329.8349999999什么的,而529.835页可能是529.83500001或者529.834999999什么的。当然这里的数值只用来形象地表达一下意思,而内存里面的真实数值是多少我不是很清楚。哪怕你写个a=1.1;内存里面也不会是绝对的1.1。
这点就好像无论你用3.1415925。。不管小数点后多少位都不可能表示出Pai的真实大小。
再次提醒!总之,记住C语言里面的浮点数不会是绝对的字面值,而只能是最接近于字面值的数值。
还有,楼主所写的公式也是错的,我猜楼主想写的是(int(A*1000+5)*0.001)。但这样不会消除小误差而反而会引入更多的误差,慎之!
如果楼主对这样的误差不能接受的话,建议楼主放弃用浮点数,改用定点数去实现。