c语言编程中的小问题

问题一:
下面是一段四舍五入并且保留两位小数的代码:
#include<stdio.h>
main()
{
double a;
printf("请输入一个数:");
scanf("%lf",&a);
a=(int)(a*100+0.5);
a=a/100;
printf("经过四舍五入后的值为:%.2f",a);
}
能否将:
a=(int)(a*100+0.5);
a=a/100;
合并成一个语句
或者说为什么不能写成:
a=((int)(a*100+0.5))/100;

问题二:
下面一段代码:
#include<stdio.h>
main()
{
double a=2.336;
printf("经过四舍五入后的值为:%.2f\n",a);
}
输出的结果是2.34
如果我要将一个数保留两位小数但是不要四舍五入

就是直接把小数第三位以后的东西扔掉,有没有简单的编程方法?

1、可以的。

a = (int)(a * 100 + 0.5); // 将第三位小数加上去,通过强制类型转换,则会丢弃小数部分
a = a / 100; // 由于a是double类型,故商包含2位小数
a = (int)(a * 100 + 0.5)/100.0; // 这样合并会得到相同的结果。

2、可以这样操作。

a = (int)(a * 100)/100.0;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-03
问题一:可以写成:a=(int)((a*100+0.5)/100);

问题二:可以写成:printf("保留两位小数后的值为:%.2f\n",((int)(a*100))/100.0);
第2个回答  2015-02-03
(1) 不能,(int)(a*100+0.5) 强转为整型,如果这个时候直接除100 不赋值给a,会发生如下:
假如这个时候(int)(a*100+0.5)=1223那么((int)(a*100+0.5))/100=12 这样a=((int)(a*100+0.5))/100=12.00,不是12.23
(2)
#include<stdio.h>
#include <math.h>
int main()
{
double a=2.336;
a *= 100;
a = floor(a);
a /=100;
printf("经过四舍五入后的值为:%.2f\n",a);
return 0;
}追问

有人回答出来了,第一问可以的你看看吧

追答

你的问题是为什么不能写成:
a=((int)(a*100+0.5))/100;

不能写成100, 但可以写100.0 差距很大的。
第二题 那两个的答案比较好,我这个稍微麻烦了。

相似回答