在Array中输入Casting

时间:2017-01-27 14:24:11

标签: c arrays casting

在一定的时间间隔内,输出偏差为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]);
    }
}

2 个答案:

答案 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);

由于浮点的舍入错误。