
main()
{
double a;
printf("请输入一个四位小数:\n");
scanf("%d",&a);
a*=100;
a+=0.5;
(int)(a);
a/=100;
printf("结果是:%2f\n",a);
}
可以这样写吗?哪里错了?
#include
main()
{
double a;
printf("请输入一个四位小数:\n");
scanf("%lf",&a);//双精度应该是的%lf
a*=100;// 扩大100倍,举个例子:a=123.4567,a=a*100,则a=12345.67
a+=0.5;//加0.5进行四舍五入a=12346.17
a=(int)a;//这个握轿地方是想保留两位小数,后边的舍去,所以进行强制类型转换.
a/=100;/段局肆/上面扩大100倍,现在要对其缩小100
printf("结果是:%f\n",a);//这样就行了,或者printf("结果是:%.2f\腊举n",a);
}
scanf("%d",&a);改为:
scanf("%lf",&a);
printf("结果是:%2f\n",a);改为:
printf("结果是:%.2f\n",a);
%2f 是耐消按2位输出,%.2f是按握亩知小数部分保留两位输出,一失足成千段消古恨啊。小心呀
应该是精度问题帆者。因你态历薯使用的是float变量,你可以用printf显烂让示a*100的结果是155.499995而不是155.50000你可以全改成double型#include
double fun ( double h )
{ return (long)( h * 100 +0.5 )/ 100.0;
}main( )
{ double a;
printf ("Enter a: "); scanf ( "%lf", &a );
printf ( "The original data is : " );
printf ( "%lf %lf\n\n", a, a*100 );
printf ( "The result : %lf\n", fun ( a ) );
}
这样相烂氏亩当于取整,a*=1000;a+=5;a/=10;a/=100.0;核兆这样就可以了!
设a为1.256,由a*=1000;得a=1256;由a+=5;得a=1231;由a/=10;得a=123;由a/=100.0;得a=1.230000;后面的饥森不变。
double a;改为 float a;
scanf("%f",&a);改为scanf("%lf",&a);
printf("结果是姿枣:%2f\n"简慎,a);改为printf("迹咐拆结果是:%.2f\n",a);