有时,简单兴趣计划会出现错误的价值观

时间:2013-09-08 04:26:48

标签: c linux gcc floating-point scanf

我写了一个基本的简单程序来计算对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

还有更多的例子。请解决我的查询

1 个答案:

答案 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,但请注意,舍入仍然会发生,只需更精确。