Float类型变量的值本身不是一个精确地值。
当给float变量赋值后,取到的不是一个准确值。如下:
Float fTmpVariable = 99.9;
他的值可能是99.8903或者99.90023之类的值,故float变量之间进行直接比较是没有意义的。
所以如果我们要取得精确地变量的值或者需要利用变量精确计算的时候就需要想一个办法。
方法一:将小数转化为整数进行计算,分别取出整数部分和小数部分,利用组合后的数据进行计算
float fTmpVariable1 = 9999.9
float fTmpVariable2 = 9999.98;
unsigned long ulConvert;
unsigned long ulInteger;
unsigned char ucDecimal;
ulConvert = fTmpVariable1 * 10;
/* 整数部分取得 */
ulInteger = ulConvert / 10;
/* 小数部分取得 */
unsigned char ucDecimal = ulConvert % 10;
/* 数据整合 */
ulTmpVariable1 = ulInteger * 10 + ucDecimal;
ulConvert = fTmpVariable2 * 100;
/* 整数部分取得 */
ulInteger = ulConvert / 100;
/* 小数部分取得保留一位有效小数 */
ucDecimal = ulConvert / 10 % 10;
/* 数据整合 */
unsigned long ulTmpVariable2 = ulInteger * 10 + ucDecimal;
方法二:将数据转换为字符进行运算
char array[10] = {0};
float fTmpVariable = 999.875;
unsigned long ulTmpVariable;
/* 转换为整数 */
ulTmpVariable = fTmpVariable * 1000;
/* 转换到数组中存储 */
sprintf(array,"lld%",ulTmpVariable );
/* 取得小数位 */
char arrlen = strlen(array);
/* 分别取得对应的小数 */
char ucDecimal1 = array[arrlen - 3];
char ucDecimal2 = array[arrlen - 2];
char ucDecimal3 = array[arrlen - 1];