emwim函数:void GUI_DispFloatMin(float v, char Fract);
描述
在当前窗口的当前文本位置处,使用当前字体显示小数点右边十进制数最少的浮点数值。注意有四舍五入
源码
/*********************************************************************
*
* GUI_DispFloatMin
*/
void GUI_DispFloatMin(float f, char Fract) {
_DispFloatMin(f, Fract, 0);
}
/*********************************************************************
*
* _DispFloatMin
*/
static void _DispFloatMin(float f, char Fract, int DrawPlusSign) {
int Len;
float fRound; /* Value only used to calculate the length */
int Decs;
fRound = f;
if (f == 0) {
fRound = 1;
} else if ((f >= 0) && (f < 1)) { /* Values between 0 and 1 */
Decs = _GetDecs(f);
if (Decs <= Fract) {
fRound += 1;
} else {
if (f >= 0.5f) {
if (Fract) {
fRound = 1;
} else {
fRound = 0;
f = 1;
}
} else {
if (Fract) {
fRound = 1;
f = 0;
} else {
fRound = 0;
f = 0;
}
}
}
} else if ((f < 0) && (f > -1)) { /* Values between 0 and -1 */
Decs = _GetDecs(f);
if (Decs <= Fract) {
fRound -= 1;
} else {
if (f <= -0.5f) {
if (Fract) {
fRound = 1;
} else {
f = fRound = -1;
}
} else {
if (Fract) {
fRound = 1;
} else {
f = fRound = 0;
}
}
}
}
fRound = fRound * GUI_Pow10[(unsigned)Fract];
fRound = _RoundHalfUp(fRound);
Len = GUI_Long2Len((long)fRound) - Fract;
if (Len < 0) {
Len = 0;
}
if ((DrawPlusSign == 1) && (f > 0)) { /* Add one character for the plus sign if required */
Len++;
}
_DispFloatFix(f, (char)(Len + Fract + (Fract ? 1 : 0)), (char)Fract, DrawPlusSign);
}