首页
社区
课程
招聘
向大家请教一个简单的C语言问题,请进!
2008-10-28 23:54 4283

向大家请教一个简单的C语言问题,请进!

2008-10-28 23:54
4283
我有一个变量
float a;

我想当a==1.0时,使用sprintf函数输出“a=1”
想当a==1.2时,使用sprintf函数输出“a=1.2”

也就是说,当小数位全为0时,就不输出小数,当小数位不全为0时,就输出小数位的数值

谢谢大家!!

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2008-10-29 04:41
2
0
这样试试:

const float epsilon = 1e-8;    // 浮点数不应该与0直接比较,定义一个最小误差,如果绝对值小于它就认为值是0

int t = ( int )( a );          // t取a的整数部分,然后对t与a的差进行判断。

if ( (a - (float)(t) ) < epsilon )
{
    小数部分为0
}
else
{
    小数部分不为0
}
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
dayed 1 2008-10-29 08:16
3
0
我这个就能比一位的
if (a*10%10!=0)
{}
else
{}
雪    币: 220
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
compiler 2008-10-29 08:24
4
0
printf("%g",a);
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2008-10-29 12:03
5
0
楼上的这位id叫 编译器,果然给出了正确答案。

唉,我都不知道格式字符串还有个%g的东西。

惭愧。

关于%g的解释如下:

Signed value printed in f or e format, whichever is more compact for the given value and precision. The e format is used only when the exponent of the value is less than –4 or greater than or equal to the precision argument. Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.

大意就是说它总是近可能使输出长度变小,如果指数表示法更短,就用指数表示,否则就用小数表示。另外它会将所有尾部的0去掉。只有小数部分不为零,才会输入小数点。

这正是楼主需要的答案。

谢谢编译器,哈哈。
雪    币: 233
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dssz 2008-10-29 12:08
6
0
楼上各位真是高手啊,谢谢大家了
游客
登录 | 注册 方可回帖
返回