如何确定一个数字中的小数位数?

Law*_*ong 1 c decimal

我正在用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美元

谢谢,劳伦斯.

Lev*_*von 5

实际上,小数位数是数字内部表示的函数.显示数字时看到的是,作为打印字符串的数字.

因此,如果您对显示的值感兴趣,您可以首先使用格式化指令控制小数位数,例如%5.2f,或者使用字符串函数方法,如果您将数字作为串.

另外,作为一个旁边,你会计算尾随零?

也许说出你想要这样做的目标会有所帮助吗?可能还有其他方法可以实现您的目标.

更新:

根据您的更新,问题实际上不计算小数位,而是你遇到代表问题/舍入错误(不常见).问题是某些小数值无法在基数2中准确表示.这里有一个详尽的解释:每个计算机科学家应该知道浮点运算.

看看这个SO问题:了解浮点表示错误; 我的想法有什么问题?

您可以尝试使用此方法来舍入值:

float rounded_val = floorf(value * 100.0 + 0.5) / 100.0; 
Run Code Online (Sandbox Code Playgroud)

Wikipeadia有一篇关于四舍五入的文章.