C 使用单独的美元和美分数组打印美元金额
我试图获取用户输入,将其存储在数字的数组中,然后获取数字的美元和美分部分,将其存储在单独的数组中,然后打印格式化的数字 这是我的代码:C 使用单独的美元和美分数组打印美元金额,c,arrays,C,Arrays,我试图获取用户输入,将其存储在数字的数组中,然后获取数字的美元和美分部分,将其存储在单独的数组中,然后打印格式化的数字 这是我的代码: #include <stdio.h> int main() { int i; float amounts[5]; printf("Enter numbers as dollar amounts: \n"); for(i=0; i<5; i++) { printf("Value %d: ", i+1); s
#include <stdio.h>
int main()
{
int i;
float amounts[5];
printf("Enter numbers as dollar amounts: \n");
for(i=0; i<5; i++) {
printf("Value %d: ", i+1);
scanf("%f", &amounts[i]);
}
long dollars[5];
long cents[5];
for (i=0; i<5; i++) {
dollars[i]=(int)amounts[i];
cents[i]=(amounts[i]-dollars[i]);
cents[i]*=100;
}
for (i=0; i<5; i++) {
printf("\n$%ld.", dollars[i]);
printf("%ld", cents[i]);
}
return 0;
}
#包括
int main()
{
int i;
浮动金额[5];
printf(“输入数字作为美元金额:\n”);
对于(i=0;i你失去了这里的分数部分:
cents[i]=(amounts[i]-dollars[i]);
cents[i]*=100;
两者之间的差值小于1,因此将该值赋给int
会导致该值被截断为0
在赋值之前,需要将差值相乘,以避免截断:
cents[i]=100*(amounts[i]-dollars[i]);
你失去了这里的分数部分:
cents[i]=(amounts[i]-dollars[i]);
cents[i]*=100;
两者之间的差值小于1,因此将该值赋给int
会导致该值被截断为0
在赋值之前,需要将差值相乘,以避免截断:
cents[i]=100*(amounts[i]-dollars[i]);
(i=0;i)的
for(i=0;iOP的方法有问题
printf("\n$%ld.", dollars[i]);
printf("%ld", cents[i]);
负数amount[i]==-1.23
看起来像“$-1-23”
像amount[i]==9.998这样的值打印为“$9.99”
,可能应该是“$10.00”
缺少前导零金额[i]==1.03
打印为“$1.3”
当amounts[i]
超出int
范围时,amounts[i]=(int)amounts[i]
失败
OP的关键问题
// problem
dollars[i]=(int)amounts[i];
cents[i]=(amounts[i]-dollars[i]); // cents[i] is an integer, cannot hold a fraction
cents[i]*=100;
// Alternative
// round
amount[i] = round(amount[i] * 100)/100.0;
// take apart;
float ipart;
cents[i] = (int) roundf(modff(amounts[i], &ipart)*100.0f);
dollars[i] = (int) ipart;
如果代码要使用FP赚钱,建议:
使用double
在任何不精确的计算之后,四舍五入到最近的货币单位。在OP的情况下,这是1/100
amount[i] = round(amount[i] * 100)/100.0;
使用统一打印
printf("\n$%0.2f", amount[i]);
OP的方法有问题
printf("\n$%ld.", dollars[i]);
printf("%ld", cents[i]);
负数amount[i]==-1.23
看起来像“$-1-23”
像amount[i]==9.998这样的值打印为“$9.99”
,可能应该是“$10.00”
缺少前导零金额[i]==1.03
打印为“$1.3”
当amounts[i]
超出int
范围时,amounts[i]=(int)amounts[i]
失败
OP的关键问题
// problem
dollars[i]=(int)amounts[i];
cents[i]=(amounts[i]-dollars[i]); // cents[i] is an integer, cannot hold a fraction
cents[i]*=100;
// Alternative
// round
amount[i] = round(amount[i] * 100)/100.0;
// take apart;
float ipart;
cents[i] = (int) roundf(modff(amounts[i], &ipart)*100.0f);
dollars[i] = (int) ipart;
如果代码要使用FP赚钱,建议:
使用double
在任何不精确的计算之后,四舍五入到最近的货币单位。在OP的情况下,这是1/100
amount[i] = round(amount[i] * 100)/100.0;
使用统一打印
printf("\n$%0.2f", amount[i]);
#包括
#包括
int main()
{
int i,j;
浮动金额[5];
printf(“输入数字作为美元金额:\n”);
对于(i=0;i#包括
#包括
int main()
{
int i,j;
浮动金额[5];
printf(“输入数字作为美元金额:\n”);
对于(i=0;i请不要使用浮点数表示货币。将值存储为美分/便士等。由于cents[i]=(amounts[i]-dollars[i]);
尝试将分数存储在int
中,存储的值将始终为零。在同一行中进行乘法:cents[i]=100*(amounts[i]-dollars[i])
。仍然存在问题:1000000.03之类的数字很可能仍然会给你0美分,因为float
类型的范围有限。另外,请注意,你的代码将1.09
格式设置为1.9
-你也必须解决这个问题。你可以将long int
转换为float
然后你再把它写回来,真的吗?请不要用浮点数来表示货币。将值存储为美分/便士等。由于美分[i]=(金额[i]-美元[i]);
尝试将分数存储在整数中,存储的值将始终为零。在同一行中进行乘法:美分[i]=100*(金额[i]-美元[我])
。仍然存在问题:1000000.03之类的数字很可能仍然会给你0美分,因为float
类型的范围有限。另外,请注意,你的代码将1.09
格式设置为1.9
-你也必须解决这个问题。你可以将long int
转换为float
然后你再做回来,真的吗?有一个;
丢失了…你发现了吗?肯定应该使用四舍五入到最近的函数来避免截断问题。cents[i]=(长)四舍五入(十进制)
缺少一个;
缺少…你发现了吗?肯定应该使用四舍五入到最近的函数来避免截断问题。cents[i]=(长)四舍五入(十进制);