我正在用 C 编写程序。
有没有办法确定小数位数
在 float 中(即 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());
结果:总票价为 34.56 美元
我这样做了,它返回了 34.56... 我希望它是 34.57 美元
谢谢, 劳伦斯。
最佳答案
实际上,小数位数是数字内部表示的函数。当您显示数字时,您看到的是作为打印字符串的数字。
因此,如果您对显示的值感兴趣,您可以首先使用格式化指令控制小数位数,例如 %5.2f
,或者使用您提到的字符串函数方法在您将数字作为字符串后,在您的帖子中。
另外,顺便说一句,你会计算尾随零吗?
也许陈述您想要这样做的目标会有所帮助?可能还有其他方法可以完成您想要做的事情。
更新:
根据您的更新,问题实际上不是计算小数位,而是您遇到了表示问题/舍入错误(并不少见)。问题是某些小数值无法以 2 为基数准确表示。下面是详尽的解释:What Every Computer Scientist Should Know About Floating-Point Arithmetic .
看看这个 SO 问题:Understanding floating point representation errors; what's wrong with my thinking?
你可以试试这个方法来四舍五入:
float rounded_val = floorf(value * 100.0 + 0.5) / 100.0;
维基百科在 rounding 上有整篇文章.
关于c - 如何确定数字中的小数位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263628/