【急急急】如何将一个float型数据对应的各位提取出来?

gaupen1186 2011-12-02 04:12:32
一个float型数据,比如是123.456,如何把他的各个位分别提取出来?就是分别得到1,2,3,4,5,6跟小数点。
假如是int型,就可以通过跟10取余%10来提取所有位,但浮点型怎么办呢?
keil C51里用。
...全文
1392 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyanchao153 2012-08-06
  • 打赏
  • 举报
回复
例如1.00000 把1.00000*10000 然后用long int 型 储存 1000000 在进行分离
狂且 2011-12-03
  • 打赏
  • 举报
回复
对啊, keil C51 里用浮点数本来就不好. 不知道楼主要这么去处理一个浮点数有什么用啊?

说出来或许可以用其他方法解决.
rocky_huang 2011-12-03
  • 打赏
  • 举报
回复
LZ,你在kc下编写,不能用float类型的,有个技巧可以推荐给你:就是将float转换成int类型或者long型,
比如123.456,转换成int就让这个数*1000,这样就变成了123456,当然其他的数据也要相应的*1000,然后计算就方便了,但是心里要有数,这是*1000的值,最后在转换为实际值!
AIGPTchina 2011-12-03
  • 打赏
  • 举报
回复
难道必须要定义浮点型才能解决问题?
windman521 2011-12-03
  • 打赏
  • 举报
回复
float a = 123.456;
int b;

while ((int)(a * 10) % 10)
{
a *= 10;
}

b = (int)a;

。。。。。。继续
AnYidan 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iblold 的回复:]
引用 5 楼 yang7531388 的回复:
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

转为字符串后,也可以使用切割函数strtok,根据"."将字符串切割开,再一个个得到每个位

这个可能有点烦,希望有更好的解决方法


c51最好不用sprintf之类的函数,太……
[/Quote]

用 c51 处理 float 就是大忌,lz 居然还要在转成 string
zichen0422 2011-12-02
  • 打赏
  • 举报
回复
float 也可以转换成字符串处理,分隔符.在这个.的前后使用处理方法就可以的啊!
iblold 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yang7531388 的回复:]
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

转为字符串后,也可以使用切割函数strtok,根据"."将字符串切割开,再一个个得到每个位

这个可能有点烦,希望有更好的解决方法
[/Quote]

c51最好不用sprintf之类的函数,太耗资源
楼主可以尝试把浮点数扩大,比如*1000,变成整数,然后在%10之类的取每一位就行了
Defonds 2011-12-02
  • 打赏
  • 举报
回复
用算法
或者字符串截取一下
yang7531388 2011-12-02
  • 打赏
  • 举报
回复
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

转为字符串后,也可以使用切割函数strtok,根据"."将字符串切割开,再一个个得到每个位

这个可能有点烦,希望有更好的解决方法
gongheguoyingpai11 2011-12-02
  • 打赏
  • 举报
回复
使用fmod()函数,这是<math.h>中的一个对浮点数求余数的函数,示例如下:
#include<stdio.h>
#include<math.h>


int main()
{
double num=10.0;
double num1=3.0;
double num2;


num2=fmod(num,num1);

printf("%lf, %lf, %lf\n",num,num1,num2);

}
boluomianbao 2011-12-02
  • 打赏
  • 举报
回复

搞错了,lz要在Keil里用,我的方法不适用了。。
SORRY了··
boluomianbao 2011-12-02
  • 打赏
  • 举报
回复
同样遇到这个问题,不过,我只要提取整数部分存到int变量,小数部分存到int变量
我现在想用的方法是:写2个小函数,里面写实现,分别返回整数部分和小数部分的内容,两部分的内容取出就用查找小数点,然后截取左边字串和右边字串,用atoi得到int型值。
lz要得到每一位,应该也不难了。

能力有限,只知道先用笨拙的方法,后期遇到更好的,再优化咯!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧