在一定的时间间隔内,输出偏差为0.1。
我尝试转换数组cent
,但这并不起作用。我尝试声明额外的值来存储数组,然后转换那个也没有做到这一点的值。
如何解决这个问题?
#include <stdio.h>
int main(void)
{
float amount[5];
long dollar[5];
long cent[5];
float storage = 0;
int i = 0;
printf("Enter five values: \n");
for (int i = 0; i < 5; ++i)
{
scanf("%f", &amount[i]);// 2.75
dollar[i] = (long) amount[i]; // 2.
cent[i] = ((float)amount[i] - dollar[i]) * 100.00;//.75
printf("$%ld.%ld.\n",dollar[i],cent[i]);
}
}
答案 0 :(得分:0)
浮点数不能存储所有数字的精确表示。
如果我在scanf之后添加以下行:
printf("amount=%.8f\n", amount[i]);
我得到了这个输出:
Enter five values:
1.1
amount=1.10000002
$1.10.
1.2
amount=1.20000005
$1.20.
1.3
amount=1.29999995
$1.29.
1.4
amount=1.39999998
$1.39.
1.5
amount=1.50000000
$1.50.
您可以看到值是近似值。有些略高,有些略低。然后,当您计算((float)amount[i] - dollar[i]) * 100.00
时,整数部分比您预期的少1,而小数部分略小于1。将此值分配给整数类型会截断该值。
您应该使用roundf
函数将此结果舍入为最接近的整数:
cent[i] = roundf(((float)amount[i] - dollar[i]) * 100.00);
确保#include <math.h>
位于顶部,并在编译时链接到数学库中。
答案 1 :(得分:0)
尝试:
cent[i] = (amount[i] * 100.00) - (dollar[i]*100);
由于浮点的舍入错误。