我正在用C写一个程序.
有没有确定一个浮点数(即小数的个数任何方式0.123 = 3,0.123456 = 6等等)?
除了将数字转换为字符串并使用字符串函数来拉小数位后的字符?
我有一个名为computeFare()的函数
float computeFare()
{
totalFare = (3.40 + basicFare) * (1 + surchargePercent);
return totalFare; // **in this case totalFare = 34.567**
}
printf("Total fare is $%.2f\n",
computeFare());
Run Code Online (Sandbox Code Playgroud)
结果:总票价为34.56美元
我这样做了它返回34.56 ......我希望它是34.57美元
谢谢,劳伦斯.
实际上,小数位数是数字内部表示的函数.显示数字时看到的是,作为打印字符串的数字.
因此,如果您对显示的值感兴趣,您可以首先使用格式化指令控制小数位数,例如%5.2f,或者使用字符串函数方法,如果您将数字作为串.
另外,作为一个旁边,你会计算尾随零?
也许说出你想要这样做的目标会有所帮助吗?可能还有其他方法可以实现您的目标.
更新:
根据您的更新,问题实际上不计算小数位,而是你遇到代表问题/舍入错误(不常见).问题是某些小数值无法在基数2中准确表示.这里有一个详尽的解释:每个计算机科学家应该知道浮点运算.
看看这个SO问题:了解浮点表示错误; 我的想法有什么问题?
您可以尝试使用此方法来舍入值:
float rounded_val = floorf(value * 100.0 + 0.5) / 100.0;
Run Code Online (Sandbox Code Playgroud)
Wikipeadia有一篇关于四舍五入的文章.