c - 如何确定数字中的小数位数?

标签 c decimal

我正在用 C 编写程序。

有没有办法确定小数位数 在 float 中(即 0.123 = 30.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/

相关文章:

c++ - 为 C 库编写 C++ 包装器

Python 3.0+ 设置为最多 4 位小数和四舍五入

c - 如何将字节数组(包含十六进制值)转换为十进制

php - 我可以使用 $string number_format 行为小数点上标吗?

c - 如果我取消链接打开的 fifo 管道会怎样?

c - 使用 Time 获取当前日期的天数

c - 将指向字符串文字的指针转换为 int 指针的结果是什么?

c++ - XSD 方案语法和 gSoap

decimal - 如何将大数转换为十进制?

javascript - jQuery、javascript - 如何添加小数?