取两位小数四舍五入
取两位小数四舍五入,如输入3.145程序执行后输出3.15======编译无错误,因该是数据转换问题,导致结果不对
===========================================================================================
#include "stdio.h"
#include "math.h"
main()
{
double a;
int b,c,d;
scanf("%f",&a);
b=a*1000;
d=b%10;
if(d<=4)
{
c=a*100;
printf("%f",c/100);
}
else
{
c=a*100+1;
printf("%f",(float)c/100);
}
}
===========
盼人解答
----------------解决方案--------------------------------------------------------
用于浮点数输出,小数点前面的数表示浮点数所占的位数(包括小数点),后面的表示精确到小数点第几位.
printf("%12.2lf",x);
----------------解决方案--------------------------------------------------------
老实说,我也不太清楚错在哪里,我复制了你的再加入自己的思路做了个:
#include "stdio.h"
#include "math.h"
main()
{
float a,c,e;
int b,d;
scanf("%f",&a);
b=a*1000;
d=b%10;
if(d<=4)
{
c=a*100;
}
else
{
c=a*100+1;
}
e=c/100;
printf("%.2f",e);
}
----------------解决方案--------------------------------------------------------
不知道 整型和实型怎么相互赋值的.
奇怪中.int e=1;
printf("%f",e);
输出0.0000000
float e=1;
printf("%d",e);
输出0
一个整型数用%f输出的话就是0.000000
实型用%d输出的话就是0
谁可以解释一下?
----------------解决方案--------------------------------------------------------
..............这个 是你的转换字符错误...
double是%lf
float是%f
..不信你改了就对了
----------------解决方案--------------------------------------------------------
输入和输出要前后一致的
前面定义的float 后面输出时就要用%.2f;".2"是指保留两位小数
前面定义的int 后面就要用%d
----------------解决方案--------------------------------------------------------
也不是,我直接改double为float也不行.还是那个问题,实型和整型怎么互相输出?
----------------解决方案--------------------------------------------------------
回复 7# 的帖子
double 和float都是一样的 都是浮点型 输出时都用%f的int定义的才是整型 输出用%d
----------------解决方案--------------------------------------------------------
原帖由 [bold][underline]dousao[/underline][/bold] 于 2007-11-24 15:59 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1112849&ptid=188073][/url]
不知道 整型和实型怎么相互赋值的.
奇怪中.int e=1;
printf("%f",e);
输出0.0000000
float e=1;
printf("%d",e);
输出0
一个整型数用%f输出的话就是0.000000
实型用%d输出的话就是0
谁可以解释一下? ...
不知道 整型和实型怎么相互赋值的.
奇怪中.int e=1;
printf("%f",e);
输出0.0000000
float e=1;
printf("%d",e);
输出0
一个整型数用%f输出的话就是0.000000
实型用%d输出的话就是0
谁可以解释一下? ...
/*------------------------------------------------------------*/
这好像与printf()这个函数的机制有关
比如printf("%d,%d,%d\n",i,j,k);
这个语句是要打印三个整形数据i,jk.
也就是说printf()函数期待着这三个数据i,j,k是整型的!
但是偏偏如果你的i,j,k不是整形的,那么会产生什么后果呢?
假如i为double型,j为char型,k为整形
计算机首先根据变量的类型(i,j.k)把这些值放在堆栈中.
所以i占8个字节,j占1个字节,k占2个字节(ps:我的机器)
然后printf("%d,%d,%d\n",i,j,k);读取的时候是根据格式转换符读取的
也就是说在堆栈中,首先取2个字节,打印出来,再取2个字节打印出来,还取2个字节打印出来
可是一个i就在对战中占8个字节
当然打印的就非自己期望的值.
----------------解决方案--------------------------------------------------------
#include "stdio.h"
#include "math.h"
main()
{
double a;
int b,c,d;
scanf("%lf",&a);
b=a*1000;
d=b%10;
if(d<=4)
{
c=a*100;
printf("%.2f\n",(float)c/100);
}
else
{
c=a*100+1;
printf("%.2f\n",(float)c/100);
}
return 0;
}
//想4楼说的,,就可以了,对了。我还加了printf("%.2f\n",(float)c/100); 中的float 和%.2f\n
----------------解决方案--------------------------------------------------------