...一个整数int,而不是在强制转换后还要继承float的精确度
发布网友
发布时间:2024-10-22 12:33
我来回答
共2个回答
热心网友
时间:2024-11-09 03:57
首先,用VC6运行你的程序也是正确。
float浮点数的精度是小数点后6位之内都可以保证,所以你的问题不是float精度问题,因为不清楚你的错误结果是什么,无法猜测。
下面给你一个使用数组和循环的程序,在节省代码的同时,增加了两个安全处理:双精度和安全运算(这个在你的程序中同样适用,你可以修改试试)
#include<stdio.h>
#include<stdlib.h>
int main()
{
double x;//双精度
int y,i;
int a[13]={10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
int b[13];
scanf("%lf",&x);
x= x*100.0;
y=(int)x;//安全计算
for (i=0;i<13;i++)
{
b[i] = y/a[i];
y = y%a[i];//y - a[i]*b[i]
}
for (i=0;i<13;i++)
{
if(b[i]==0) continue;
if(a[i]<10)//fen
printf("%d fen: %d\n",a[i],b[i]);
else if(a[i]<100)//jiao
printf("%d jiao: %d\n",a[i]/10,b[i]);
else //yuan
printf("%d yuan: %d\n",a[i]/100,b[i]);
}
system("pause");
return 0;
}
热心网友
时间:2024-11-09 03:51
不知道是系统问题还是什么别的问题,我这里试的就是完全正确的。
热心网友
时间:2024-11-09 03:50
首先,用VC6运行你的程序也是正确。
float浮点数的精度是小数点后6位之内都可以保证,所以你的问题不是float精度问题,因为不清楚你的错误结果是什么,无法猜测。
下面给你一个使用数组和循环的程序,在节省代码的同时,增加了两个安全处理:双精度和安全运算(这个在你的程序中同样适用,你可以修改试试)
#include<stdio.h>
#include<stdlib.h>
int main()
{
double x;//双精度
int y,i;
int a[13]={10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
int b[13];
scanf("%lf",&x);
x= x*100.0;
y=(int)x;//安全计算
for (i=0;i<13;i++)
{
b[i] = y/a[i];
y = y%a[i];//y - a[i]*b[i]
}
for (i=0;i<13;i++)
{
if(b[i]==0) continue;
if(a[i]<10)//fen
printf("%d fen: %d\n",a[i],b[i]);
else if(a[i]<100)//jiao
printf("%d jiao: %d\n",a[i]/10,b[i]);
else //yuan
printf("%d yuan: %d\n",a[i]/100,b[i]);
}
system("pause");
return 0;
}
热心网友
时间:2024-11-09 03:56
不知道是系统问题还是什么别的问题,我这里试的就是完全正确的。