整数(浮点数)转字符串

在实际项目中,我们不可避免的遇到需要将整数(浮点数)转换为字符串输出(保存为文件或者显示打印)。这是一个很常见的算法,标准C库甚至提供了诸如itoa,ltoa,之类的函数供大家调用。但是,在一些特殊场合,比如对功耗要求比较苛刻的场合,则对转换速度提出了要求。在单片机应用中,很多mcu没有除法器,和除法指令,我们就得变通一下。

1. 浮点数转字符串

我们知道,在单片机中,浮点运算是比较费时的运算。我们就可以根据自己的精度要求,先将浮点数转换为整数,在进行整数运算,则会节约不少运算时间。比如我们在数据采集存储过程中,只需要保留小数点后面三位。那么,我们对需要转换的浮点数乘以1000,得到整数。

float f= 417.123;
int it = 0;

it = (int)(f*1000);

2. 整数转换为字符串

一般情况下,我们为了代码的简洁直观,我们会采用如下形式.然后将得到的字符串颠倒一下次序就可以了,因为是从低位往高位计算的。

   while(val!=0)
   {
     buf[i++] = ‘0’+ val%10;
     val= val/10;
   }

但是,这个方法,每得到一位需要两次除法运算。故,我们改进一下,

while(val!=0)
{
     tmp = val/10;
      buf[i++] = '0'+ val - (val<<3) - (val<<1);
      val = tmp;
}

这样,用几次移位和加减法,代替一次除法,效率就得到了很大的提升。

如果之前是浮点数转整数,再进行转化的,需要记住小数点的位置。

甚至,在某些场合,我们是能预先知道我们这个整数的最大值(这种是可能的,因为对功耗要求极为苛刻的场合,大多都是数据采集系统),也就是数字的位数,我可以用减法来代替除法。据说,很多MCU都是这样干的。假如,我的应用中,数据最大值不会超过999999,那么用空间换时间的写法如下,

先定义一个函数,该函数用于获取s的最高位,t指明了最高位是在哪一位。比如,s小于1000,那么t=100。

u8 func(u32 *s, u32 t)
{
	u8 i = ‘0’;

	while(*s>=t)
	{
		i++;
		*s -= t;
	}

	return i ;
}

接下来可以得到字符串。再特别说明,我预先知道val不会大于999999.

   buf[1]=  func(&val, 100000);
   buf[2]=  func(&val, 10000);
   buf[3]=  func(&val, 1000);
   buf[4]=  func(&val, 100);
   buf[5]=  func(&val, 10);
   buf[6]= '0' + val;
 
时间: 2024-09-30 21:44:20

整数(浮点数)转字符串的相关文章

python课程设计笔记(三)整数、浮点数与字符串

整数类型(范围无限制) 十进制1 -1 二进制0b1 -0b1 八进制0o1 -0o1 十六进制0x1 -0x1 浮点类型(范围有限制但可忽略) 运算存在不确定尾数 :0.1+0.2!=0.3 原因:二进制表示小数可以无限接近但不能完全相同,转换过程中产生不确定小数 如何避免:浮点数键运算及比较用round()函数进行辅助 round(x, d)#对x进行四舍五入,d是截取小数位数 浮点数的科学计数法表示 <a>e<b>  # a*10^b 数值运算操作符 10/3 = 3.333

整数 布尔值 字符串 for循环

1.整型和布尔值的转换: # bin -- 十进制转二进制 # int("1101",2) -- 二进制转十进制 # 十进制转二进制的算法 # 除2 取余,获取的所有余数从下往上进行计算 # 二进制转十进制的算法 # 从右向左,依次乘以2的次方 # 1101 1* 2**0 + 0 * 2**1 + 1*2**2 + 1* 2**3 # python2 中有long /获取的是整数 # python3 中只有int /获取的是浮点数 2. 字符串的方法: #name = "m

写脚本时整数比较与字符串的比较

写脚本时整数比较与字符串的比较: 整数比较-eq 等于,如:if [ "$a" -eq "$b" ]-ne 不等于,如:if [ "$a" -ne "$b" ]-gt 大于,如:if [ "$a" -gt "$b" ]-ge 大于等于,如:if [ "$a" -ge "$b" ]-lt 小于,如:if [ "$a" -lt &q

字符串分隔 -&gt;连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; ?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000 import java.util.*; public class Main{     public static void main(String[] ar

整数转化为字符串

整数转化为字符串的函数相信大家在做一些算法题的时候就已经做过,一般能想到的代码如下: 1 size_t my_uint32_to_str(uint32_t value, char *dst) 2 { 3 size_t length = digits10(value); 4 size_t len = length; 5 while(value) 6 { 7 dst[length - 1] = '0' + (value % 10); 8 length--; 9 value /= 10; 10 } 1

zg手册 之 python2.7.7源码分析(2)-- python 的整数对象和字符串对象

python 中的内置对象 python 中常用的内置对象有:整数对象,字符串对象,列表对象,字典对象.这些对象在python中使用最多,所以在实现上提供缓存机制,以提高运行效率. 整数对象 (PyIntObject) python 中的整数对象是不可变对象(immutable),即创建了一个 python 整数对象之后,不能再改变该对象的值. python 为创建整数对象提供了下面三种方法,其中 PyInt_FromString 和 PyInt_FromUnicode 内部也是调用 PyInt

Python 字符串 转换 整数 浮点数 数字

使用PyOpengl的时候,调用glVertex2f时,传入两个字符串会报错,所以需要将字符串转为浮点数再传,可以使用下面的方法. >>> import string >>> string.atoi('34') 34 >>> int('34') 34 >>> string.atof('34') 34.0 >>> float('34') 34.0

整数/小数以字符串形式输出

1.问题描述 (1).现在从键盘输入一个整数(以%d格式符输入),要求以装换成字符串的形式输出: (2).现在从键盘输入一个小数和小数位数(%lf%d),要求以字符串的形式输出: 这2个问题本身并不难,但是考虑全面和从算法上的优化确实不容易的,需要仔细认真的考虑! 2.用C实现 在VC下面用的VC++6.0版本实现 #include<stdio.h> void printfInt(int data); void printfDouble(double data, int count); voi

c++浮点数转换字符串

#include <sstream>// 函数功能:根据位数取数据的位数// @param1 [in] CAL_Tokenizer // @param2 [in] 浮点数// @param3 [in] 位数// return 取好位数的字符串string WINAPI FloatToStr(float fData1, int nBit ){    if (nBit < 0 || nBit > 8)    {        nBit = 3;    }    ostringstrea

整数 浮点数 列表 字典 布尔值 格式化输出 输出

整数 print(21+34) 浮点数 print(2.2+2.6)print(8.4-4.2)列表 place_name = ["shen zhen", "shang hai","shan xi", ["xi an","wei nan","yan an"]]print(place_name[3][1])#结果print(wei nan) 输出 name=input("你的名字