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

时间:2020-12-16 05:54:28
一个float型数据,比如是123.456,如何把他的各个位分别提取出来?就是分别得到1,2,3,4,5,6跟小数点。
假如是int型,就可以通过跟10取余%10来提取所有位,但浮点型怎么办呢?
keil C51里用。

14 个解决方案

#1


该回复于2011-12-02 16:35:59被版主删除

#2


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

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

#3


【急急急】如何将一个float型数据对应的各位提取出来?
搞错了,lz要在Keil里用,我的方法不适用了。。
SORRY了··

#4


使用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);
      

    

#5


这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

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

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

#6


用算法
或者字符串截取一下

#7


引用 5 楼 yang7531388 的回复:
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

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

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


c51最好不用sprintf之类的函数,太耗资源
楼主可以尝试把浮点数扩大,比如*1000,变成整数,然后在%10之类的取每一位就行了

#8


float 也可以转换成字符串处理,分隔符.在这个.的前后使用处理方法就可以的啊!

#9


引用 7 楼 iblold 的回复:
引用 5 楼 yang7531388 的回复:
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

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

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


c51最好不用sprintf之类的函数,太……


用 c51 处理 float 就是大忌,lz 居然还要在转成 string

#10


float a = 123.456;
int b;

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

b = (int)a;

。。。。。。继续

#11


难道必须要定义浮点型才能解决问题?

#12


LZ,你在kc下编写,不能用float类型的,有个技巧可以推荐给你:就是将float转换成int类型或者long型,
比如123.456,转换成int就让这个数*1000,这样就变成了123456,当然其他的数据也要相应的*1000,然后计算就方便了,但是心里要有数,这是*1000的值,最后在转换为实际值!

#13


对啊, keil C51 里用浮点数本来就不好. 不知道楼主要这么去处理一个浮点数有什么用啊?

说出来或许可以用其他方法解决.

#14


例如1.00000    把1.00000*10000    然后用long int  型 储存 1000000       在进行分离

#1


该回复于2011-12-02 16:35:59被版主删除

#2


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

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

#3


【急急急】如何将一个float型数据对应的各位提取出来?
搞错了,lz要在Keil里用,我的方法不适用了。。
SORRY了··

#4


使用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);
      

    

#5


这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

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

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

#6


用算法
或者字符串截取一下

#7


引用 5 楼 yang7531388 的回复:
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

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

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


c51最好不用sprintf之类的函数,太耗资源
楼主可以尝试把浮点数扩大,比如*1000,变成整数,然后在%10之类的取每一位就行了

#8


float 也可以转换成字符串处理,分隔符.在这个.的前后使用处理方法就可以的啊!

#9


引用 7 楼 iblold 的回复:
引用 5 楼 yang7531388 的回复:
这里可以这样做,用sprintf(float_str,"%f",float),将float型转为字符串,然后再对float_str一个一个的取字符就OK了

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

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


c51最好不用sprintf之类的函数,太……


用 c51 处理 float 就是大忌,lz 居然还要在转成 string

#10


float a = 123.456;
int b;

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

b = (int)a;

。。。。。。继续

#11


难道必须要定义浮点型才能解决问题?

#12


LZ,你在kc下编写,不能用float类型的,有个技巧可以推荐给你:就是将float转换成int类型或者long型,
比如123.456,转换成int就让这个数*1000,这样就变成了123456,当然其他的数据也要相应的*1000,然后计算就方便了,但是心里要有数,这是*1000的值,最后在转换为实际值!

#13


对啊, keil C51 里用浮点数本来就不好. 不知道楼主要这么去处理一个浮点数有什么用啊?

说出来或许可以用其他方法解决.

#14


例如1.00000    把1.00000*10000    然后用long int  型 储存 1000000       在进行分离