- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不明白为什么 math.h
中的 roundf()
函数不舍入 donation
变量,而它舍入livestockPM
没有问题。我需要使用舍入值进行其他计算,但我正在使用 printf
检查值是否正确,它只是返回错误值(不舍入变量 donation
)。此外,变量 final
只返回四舍五入到 .00 的值,与变量 farmer1
,2,3 保持什么无关。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int farmer1 = 9940;
int farmer2 = 4241;
int farmer3 = 7779;
float livestockPM = (float)farmer1 / (float)farmer2;
printf("livestock: %f\n",livestockPM);
livestockPM = roundf(livestockPM * 100) / 100;
printf("livestock rounded: %f\n",livestockPM);
float donation = (float)livestockPM * (float)farmer3;
printf("donation: %f\n", donation);
donation = roundf(donation * 100.00) / 100.00;
printf("donation rounded: %f\n", donation);
float final = donation * (float)farmer2;
printf("final: %f\n", final);
return 0;
}
输出:
livestock: 2.343787
livestock rounded: 2.340000
donation: 18202.859375
donation rounded: 18202.859375
final: 77198328.000000
有人知道为什么吗?我在想是因为将 float 与 int 相乘,但我似乎无法让它像这样工作。我试过从整数变量中删除 (float),但结果也不理想。谢谢。
最佳答案
OP 的float
是使用二进制 float 编码的,18202.859375
缺乏精度,无法采用"%f"
打印为 18202.860000
。
float
不能表示所有可能的数字。作为二进制 float ,它可以表示如下数字。参见 IEEE 754 Converter ,但不介于两者之间。
18202.859375
18202.86138125
当执行以下代码时,最好的结果仍然是 18202.859375
。
float donation_rounded = roundf(18202.859375 * 100.00) / 100.00;
回想一下,printf("%f\n", x)
打印了一个四舍五入到最接近 0.000001 值的数字。
代码可以使用double
,但是对于非常大的数字也会出现同样的问题,但可能会满足 OP 的即时需求。 @user3386109
由于 OP 似乎在努力应对金钱,标准 C 中没有伟大解决方案。best money/currency representation涉及一些问题。
关于c - 为什么 roundf() 不舍入 float 值,为什么 int - float 数学运算返回错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943115/
let amount:Float = 2.235 print("\(roundf(self.amountTax * 100) / 100)") 它返回 2.23 但应该是2.24 最佳答案 结果是 2
我通常很擅长用谷歌搜索这样的东西,但这次我似乎找不到任何东西。 我从 here 下载了一些源代码它使用一个名为 roundf 的函数. 我已经有了 #include 并作为第一个想法添加了#inclu
我是 C 的新手,我一直遇到同样的错误。我在 nano 文本编辑器中输入代码并在 linux 终端中编译它。我的操作系统是 Ubuntu 14.04。这是无法编译的代码示例, #include
我不明白为什么 math.h 中的 roundf() 函数不舍入 donation 变量,而它舍入livestockPM 没有问题。我需要使用舍入值进行其他计算,但我正在使用 printf 检查值是否
我记录了这些值: label.frame.size.height :18.000000, label.font.lineHeight: 17.895000 如果我像这样使用 roundf(): rou
我是一名优秀的程序员,十分优秀!