C51单⽚机浮点数运算(想将两个数做⼀个除法运算,浮点数保留三位,然后数码管输出显⽰)
因为没有电路bai,所以程序我就du没法给你写,给你个思路.
第⼀,不知道你zhi的a和b是什么类型dao的,如果是定义成浮点型,那么,可以这样写:
float f_Div = a/b;
如果两个有⼀个是整形的,那么,把整型强制转换成浮点型:
float f_Div = (float)a/(float)b;
注意,那个f_Div变量必须是float型,才能有⼩数产⽣
第⼆,你要进⾏显⽰,肯定要把各个位都取出来,这⾥⾯肯定有⼀个取模运算,就是"%",
对于浮点型,不运⾏取模运算的,所以,你必须把浮点型转换成整型,但是,不能强制转换,
⽐如: unsigned int I_Div = (unsigned int)f_Div;这是不可以的,你的⼩数部分就没有了.
所以,你必须要放⼤⼀定的倍数,根据你的要求,你是要保留三位,那么,这⾥还有个问题,你的浮点型变量float
⼩数点之前有⼏位,决定了你⼩数点后⾯保留⼏位.
⽐如,你得到的结果是 1.2345,那么,你就保留1.23
如果你得到的结果是 12.345,那么,就保留12.3
如果你得到的结果是 123.45,你就只能保留123了
如果得到的结果是 0.123,你就只能保留 0.12
所以可以看出,你的浮点型结果整数部分有多少位,决定了你的⼩数能保留多少位,所以还要进⾏如下运算:
unsigned int i_Div = unsigned int)f_Div;;
unsigned char Dot_Bit = 0; //---这个变量⽤来表⽰在第⼏位上显⽰⼩数点,因为
//---通过下⾯的操作,已经把⼩数变成整数了
if(I_Div >= 100) //---表⽰前⾯有3个整数部分位
{
; //---那就没什么可操作的,unsigned int i_Div = unsigned int)f_Div;;就符合要求
}
else if (I_DIV >= 10) //---表⽰整数部分有2位
{
I_DIV = f_Div *10;
Dot_Bit = 1; //---在右数第2个地⽅显⽰⼩数点,也就是⼗位后显⽰⼩数点
}
else
{
I_DIV = f_Div *10;
Dot_Bit = 2; //---在右数第2个地⽅显⽰⼩数点,也就是最前⾯那位后⾯显⽰
}
void Display(void)
{
unsigned char Hundred = I_Div/100;
unsigned char TenBit = (I_Div/%00)/10;
unsigned char TenBit = I_Div%10;
....... //然后就开始显⽰了
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论