假如是int型,就可以通过跟10取余%10来提取所有位,但浮点型怎么办呢?
keil C51里用。
14 个解决方案
#1
#2
同样遇到这个问题,不过,我只要提取整数部分存到int变量,小数部分存到int变量
我现在想用的方法是:写2个小函数,里面写实现,分别返回整数部分和小数部分的内容,两部分的内容取出就用查找小数点,然后截取左边字串和右边字串,用atoi得到int型值。
lz要得到每一位,应该也不难了。
能力有限,只知道先用笨拙的方法,后期遇到更好的,再优化咯!
我现在想用的方法是:写2个小函数,里面写实现,分别返回整数部分和小数部分的内容,两部分的内容取出就用查找小数点,然后截取左边字串和右边字串,用atoi得到int型值。
lz要得到每一位,应该也不难了。
能力有限,只知道先用笨拙的方法,后期遇到更好的,再优化咯!
#3
搞错了,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);
}
#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,根据"."将字符串切割开,再一个个得到每个位
这个可能有点烦,希望有更好的解决方法
转为字符串后,也可以使用切割函数strtok,根据"."将字符串切割开,再一个个得到每个位
这个可能有点烦,希望有更好的解决方法
#6
用算法
或者字符串截取一下
或者字符串截取一下
#7
c51最好不用sprintf之类的函数,太耗资源
楼主可以尝试把浮点数扩大,比如*1000,变成整数,然后在%10之类的取每一位就行了
#8
float 也可以转换成字符串处理,分隔符.在这个.的前后使用处理方法就可以的啊!
#9
用 c51 处理 float 就是大忌,lz 居然还要在转成 string
#10
float a = 123.456;
int b;
while ((int)(a * 10) % 10)
{
a *= 10;
}
b = (int)a;
。。。。。。继续
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的值,最后在转换为实际值!
比如123.456,转换成int就让这个数*1000,这样就变成了123456,当然其他的数据也要相应的*1000,然后计算就方便了,但是心里要有数,这是*1000的值,最后在转换为实际值!
#13
对啊, keil C51 里用浮点数本来就不好. 不知道楼主要这么去处理一个浮点数有什么用啊?
说出来或许可以用其他方法解决.
说出来或许可以用其他方法解决.
#14
例如1.00000 把1.00000*10000 然后用long int 型 储存 1000000 在进行分离
#1
#2
同样遇到这个问题,不过,我只要提取整数部分存到int变量,小数部分存到int变量
我现在想用的方法是:写2个小函数,里面写实现,分别返回整数部分和小数部分的内容,两部分的内容取出就用查找小数点,然后截取左边字串和右边字串,用atoi得到int型值。
lz要得到每一位,应该也不难了。
能力有限,只知道先用笨拙的方法,后期遇到更好的,再优化咯!
我现在想用的方法是:写2个小函数,里面写实现,分别返回整数部分和小数部分的内容,两部分的内容取出就用查找小数点,然后截取左边字串和右边字串,用atoi得到int型值。
lz要得到每一位,应该也不难了。
能力有限,只知道先用笨拙的方法,后期遇到更好的,再优化咯!
#3
搞错了,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);
}
#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,根据"."将字符串切割开,再一个个得到每个位
这个可能有点烦,希望有更好的解决方法
转为字符串后,也可以使用切割函数strtok,根据"."将字符串切割开,再一个个得到每个位
这个可能有点烦,希望有更好的解决方法
#6
用算法
或者字符串截取一下
或者字符串截取一下
#7
c51最好不用sprintf之类的函数,太耗资源
楼主可以尝试把浮点数扩大,比如*1000,变成整数,然后在%10之类的取每一位就行了
#8
float 也可以转换成字符串处理,分隔符.在这个.的前后使用处理方法就可以的啊!
#9
用 c51 处理 float 就是大忌,lz 居然还要在转成 string
#10
float a = 123.456;
int b;
while ((int)(a * 10) % 10)
{
a *= 10;
}
b = (int)a;
。。。。。。继续
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的值,最后在转换为实际值!
比如123.456,转换成int就让这个数*1000,这样就变成了123456,当然其他的数据也要相应的*1000,然后计算就方便了,但是心里要有数,这是*1000的值,最后在转换为实际值!
#13
对啊, keil C51 里用浮点数本来就不好. 不知道楼主要这么去处理一个浮点数有什么用啊?
说出来或许可以用其他方法解决.
说出来或许可以用其他方法解决.
#14
例如1.00000 把1.00000*10000 然后用long int 型 储存 1000000 在进行分离