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