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

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

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

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

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

谢谢大家!!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
这样试试:

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

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

if ( (a - (float)(t) ) < epsilon )
{
    小数部分为0
}
else
{
    小数部分不为0
}
2008-10-29 04:41
0
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
我这个就能比一位的
if (a*10%10!=0)
{}
else
{}
2008-10-29 08:16
0
雪    币: 220
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
printf("%g",a);
2008-10-29 08:24
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
楼上的这位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去掉。只有小数部分不为零,才会输入小数点。

这正是楼主需要的答案。

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