我写了一个基本的简单程序来计算对C的兴趣,这里是代码。
#include<stdio.h>
main()
{
float principal,rate,time,si;
printf("Please Enter The Principal Value = \n\t");
scanf("%f",&principal);
printf("Please Enter The Rate =\n\t");
scanf("%f",&rate);
printf("Please Enter Time =\n\t");
scanf("%f",&time);
si=(principal*rate*time)/100;
printf("The Simple Interest Is = \t%f",si);
}
现在的问题是每当我输入小值时,结果都是正确的,但每当我输入一些FLOAT限制内的大值时,我得到一些其他值,其中积分值匹配,但十进制值不匹配。我在Linux中创建了这个程序,并在Windows和C Free中的Turbo C中尝试了相同的操作,同样的错误出现了。我也试过初始化值,但没有用。
即将出现的流氓价值示例 -
Principal = 123456 , Rate = 1, Time =1
Principal = 4512 , Rate = 412, Time =12
还有更多的例子。请解决我的查询
答案 0 :(得分:3)
对于浮点数计算,舍入是一个常见问题,例如,当我使用Principal = 123456 , Rate = 1, Time = 1
运行程序时,结果为1234.560059
。
一个简单的改进是使用double
代替float
,它提供了更高的精确度,请注意您应该%f
scanf
相应更改为%lf
:
double principal,rate,time,si;
printf("Please Enter The Principal Value = \n\t");
scanf("%lf",&principal);
使用double
,结果为1234.560000
,但请注意,舍入仍然会发生,只需更精确。