提问人:Anik sen 提问时间:3/5/2020 最后编辑:ShadowRangerAnik sen 更新时间:3/5/2020 访问量:70
当分数值为 5 时,如何更改之前的分数值。在C语言中
How can i change the previous fraction value when the fraction value is 5. in c language
问:
我正在尝试编写一个代码,其中在十进制值之后,如果分数值为 0.005,那么它会将该值打印为 0.01。我尝试使用%0.02f,但这种方法不起作用。我的完整代码在下面和输入值。
#include<stdio.h>
int main()
{
float a,b,c=0,d=0,e=0;
while(1)
{
a=0;b=0;c=0,d=0,e=0;
scanf("%f%f",&a,&b);
c=b-a;
d=c*100.0;
e=d/a;
//printf("%0.2f\n%0.2f\n%0.2f\n",c,d,e);
printf("%0.2f%%\n",e);
}
return 0;
}
输入999.95 1000.00
预期输出 =0.01%
我的输出 =0.00%
答:
0赞
Edward Bull
3/5/2020
#1
根据您在问题中的措辞,您可能忘记了代码中的“0”。%0.2
2赞
ShadowRanger
3/5/2020
#2
你的数学,用 32 位 s,得出 的最终值 ,而不是你期望的“逻辑”(并期望四舍五入到 )。浮点数学就是这样。将其四舍五入到小数点后两位准确地将结果描述为 ;它小于 ,所以它四舍五入为 ,而不是 。float
e
0.004999...
0.005
0.01
0.00
0.005
0.00
0.01
使用更精确的类型 () 可能会有所帮助(它在我的机器上 [更改 to use 后],但许多编译器,尤其是具有更高优化的编译器,以及某些架构,违反了 IEEE-754 规范,并且可能不同意),但从根本上说,浮点数学会引入相对于精确逻辑算术的错误,所以如果你不能容忍即使是很小的错误,你应该使用不同的方法, 例如,基于定点的数学,或用于全十进制(以 10 为基数)浮点数学的类似方法。double
scanf
%lf
int
libmpdec
请注意,根据您选择的操作,您可能需要注意舍入模式;C99 将值从零四舍五入到一半,但还有其他舍入模式(四舍五入是常见的模式,因为没有在舍入中引入偏差),当四舍五入到小数点后两位时会产生,即使您确实精确生成了。0.00
0.005
评论