首先,我的环境:
经销商ID: Bunsenlabs描述:BunsenLabs GNU/Linux 10.5(锂)版本:10.5代号:克星
线程模型:posixgcc version 8.3.0 (Debian 8.3.0-6)
我正在编写一个旧的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 example.c
把303466美元加到95美分应该是303466.95,但是打印结果是303466.937500。
这是一个会计程序,不能少收一分钱。
对我来说这看起来像是一个bug,但是我已经很久没有使用C程序了,所以我会说&;user error&;是这里最相似的问题。但这似乎是如此基本,我不知道我犯了一个错误。
如果错误不是我的,是H/W还是S/W。我在2个不同的主机上运行了这个程序,所以它让我相信这是一个S/W错误。但是在哪里?
有人能看到我的代码中的错误吗?
%。1f =小数点后一位%。2f =小数点后两位…
printf("美元(% d) +美分(%)=% .2ffcents n"美元,acntBalance);