Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组中的类型转换_C_Arrays_Casting - Fatal编程技术网

C 数组中的类型转换

C 数组中的类型转换,c,arrays,casting,C,Arrays,Casting,在某些时间间隔,输出关闭0.1 我尝试转换数组分,但没有成功。我试图声明额外的值来存储数组,然后转换该值,但这也没有奏效 如何解决这个问题 #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");

在某些时间间隔,输出关闭0.1

我尝试转换数组
,但没有成功。我试图声明额外的值来存储数组,然后转换该值,但这也没有奏效

如何解决这个问题

#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]);
    }
}
#包括
内部主(空)
{
浮动金额[5];
多头美元[5];
长分[5];
浮动存储=0;
int i=0;
printf(“输入五个值:\n”);
对于(int i=0;i<5;++i)
{
scanf(“%f”,&amount[i]);//2.75
美元[i]=(长)金额[i];//2。
分[i]=((浮动)金额[i]-美元[i])*100.00;//.75
printf(“$%ld.%ld.\n”,美元[i],美分[i]);
}
}

浮点数不能存储所有数字的精确表示形式

如果我在scanf之后添加以下行:

printf("amount=%.8f\n", amount[i]);
我得到这个输出:

输入五个值:
1.1
金额=1.10000002
$1.10.
1.2
金额=1.2000005
$1.20.
1.3
金额=1.2999995
$1.29.
1.4
金额=1.3999998
$1.39.
1.5
金额=1.50000000
$1.50.
您可以看到这些值是近似值。有些稍高一些,有些稍低一些。然后,当您计算
((浮动)金额[i]-美元[i])*100.00
时,整数部分比您预期的少1,而小数部分略小于1。将此值赋给整型会截断该整型

您应该使用
roundf
函数将此结果四舍五入到最接近的整数:

cent[i] = roundf(((float)amount[i] - dollar[i]) * 100.00);
请确保在编译时在顶部包含,并在数学库中链接。

尝试:

cent[i]=(金额[i]*100.00)-(美元[i]*100)


由于浮点舍入错误。

不需要强制转换的
(浮点)金额[i]
,因为
金额[i]
已经是
浮点
。对!对不起!请向我们展示一些示例输入及其预期和实际输出。
scanf(“%ld.%ld”,美元+i,美分+i)?@Stargateur你是从哪一个代码中得到这行的?