【发布时间】:2016-12-03 00:53:34
【问题描述】:
我不明白为什么math.h 中的roundf() 函数不围绕donation 变量,而它却毫无问题地围绕livestockPM。我需要将舍入值用于其他计算,但我使用printf 检查值是否正确,它只是返回错误值(不舍入变量donation)。此外,变量final 仅返回值,好像四舍五入到 0.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
有人知道为什么吗?我在想是因为将浮点数与 int 相乘,但我似乎无法让它像这样工作。我尝试从整数变量中删除 (float),但结果也不理想。谢谢。
【问题讨论】:
-
float只有 6 或 7 位精度。将所有floats 更改为double,并使用round,而不是roundf。 -
@user3386109 谢谢,确实有效!
标签: c floating-point