编写一个数值转字符串函数,以你的原函数为例
- float Speed_now = 3.5;
- uint8_t String_buff[32];
- OLED_showString(10, 2, Float2String(String_buff, Speed_now, 1), 16);
这里给出一个我写的Float2String函数原型及其实现
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] 单精度浮点数转字符串
- * @param num:待转换的单精度浮点数
- accuracy:转换精度
- @arg 精度值取大于7时无效
- * @retval 转换完成的字符串首地址
- @arg result[]
- */
- uint8_t* Float2String(uint8_t* s_buff, float num, uint8_t accuracy) //ps:C标准输入输出库内有sprintf(...)浮点ect.数转字符串函数
- {
- uint32_t integer = 0; //整数
- uint32_t decimal = 0; //小数
- uint8_t num_temp = 0; //按位转换的结果缓冲
- uint32_t multi_dec = 1; //小数倍乘
- uint8_t point = 0; //转换结果下标
- uint8_t trans_len = 0; //按位转换的结果长度
- uint8_t trans_temp[BUFFLEN]; //按位转换的结果数组缓冲
- uint8_t accuracy_temp = accuracy; //转换精度备份
- if (num < 0)
- {
- /* 若num小于零,前填零 */
- num = -num;
- s_buff[point] = '-';
- point++;
- }
- integer = (uint16_t) num; //取整数部分
- while (accuracy--)
- {
- multi_dec *= 10; //取小数精度倍乘
- }
- decimal = (uint16_t)(multi_dec * (num - integer + 0.000001f)); //取小数部分
- if (integer)
- {
- while (integer)
- {
- /* 将整数部分转换为倒位数组 */
- num_temp = integer % 10;
- trans_temp[trans_len] = num_temp + 48;
- integer = (integer - num_temp) / 10;
- trans_len++;
- }
- point += trans_len;
- }
- else
- {
- s_buff[point] = '0';
- point++;
- }
- for (; trans_len > 0; trans_len--)
- {
- /* 将倒位数组内容存放到转换结果 */
- s_buff[point - trans_len] = trans_temp[trans_len - 1];
- }
- if (decimal)
- {
- s_buff[point] = '.'; //补小数点
- trans_len = 0;
- while (decimal)
- {
- /* 将小数部分转换为倒位数组 */
- num_temp = decimal % 10;
- trans_temp[trans_len] = num_temp + 48;
- decimal = (decimal - num_temp) / 10;
- trans_len++;
- }
- while (trans_len < accuracy_temp)
- {
- /* 补零 */
- trans_temp[trans_len] = '0';
- trans_len++;
- }
- point += (trans_len + 1);
- }
- else
- {
- s_buff[point] = 0;
- return s_buff;
- }
- for (; trans_len > 0; trans_len--)
- {
- /* 将倒位数组内容存放到转换结果 */
- s_buff[point - trans_len] = trans_temp[trans_len - 1];
- }
- s_buff[point] = 0;
- return s_buff;
- }
注:1、要想显示如你要的"V=3.5m/s",一是可以用字符串连接的方式,将数值转换的字符串拼接起来;二是可以事先计算好字符串出现在屏幕上的位置,依次放置,例如先显示"V= m/s",再更改横坐标位置,用数值转换后的字符串替换空格。
|