C语言舍入误差-硬件?软件Me?[重复]

sczxawaw  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(115)
    • 此问题在此处已有答案**:

(31个答案)
2天前关闭。
首先,我的环境:
经销商ID:本生实验室描述:BunsenLabs GNU/Linux 10.5(锂)版本:10.5代号:破坏者
螺纹型号:posix gcc版本8.3.0(Debian 8.3.0 - 6)
我在一个旧的C程序上工作,遇到了一个舍入错误。我已经将代码复制到下面的程序"example.c"中:

main()
{
    float acntBalance;
    int dollars;
    int cents;
    float fcents;
    
    dollars = 303466;
    cents = 95; 
    fcents = cents * 0.01;
    acntBalance = dollars + fcents;
    printf("Dollars(%d) + Cents(%f) = %f \n",dollars,fcents,acntBalance);
}

并使用GNU编译器编译了此代码,如下所示:
gcc-w-g-o示例示例. c
95美分加上303466美元应该是303466.95,但打印出来是303466.937500。
这是一个会计程序,1美分的折扣是不可接受的。
这看起来像是一个bug,但是我已经很久没有写C程序了,所以我会说"用户错误"是这里最常见的问题,但是这看起来太基本了,我不知道我哪里出错了。
如果错误不是我的,是硬件还是软件。我已经在两个不同的主机上运行了这个程序,所以我相信这是一个软件错误。但是在哪里呢?
有人能看到我代码中的错误吗?

6rqinv9w

6rqinv9w1#

%.1f =一位小数%.2f =两位小数...
printf(“美元(%d)+美分(%f)=%.2f\n”,美元,美分,帐户余额);

相关问题