python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)
python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)定义的Num2Str函数代码如下图所示:通过分析,在将数值表示为“数值 单位前缀 国际标准单位”的字符串形式时,数值部分为原值num除以1000的幂,单位前缀可在列表中索引得到,国际标准单位根据数据的实际物理意义给出即可。先说一下解决思路,从数学推导的角度去思考这个问题,若将一个数值num表示为1000的x次方,那么我们可以求出x的值为:假如求得的x=1.3,那么说明了num的值在以下区间内:所以只要原值num除以1000的1次幂就可以将数值部分转换到[1----1000]之间的值了,这儿的1次幂是由x值1.3向下取整floor(x)得到的。
问题背景在常用的诸如示波器、频谱仪、接收机等电子测量仪器中,当借助于游标读取波形图曲线上某点数据值时,显示结果一般为“数值 单位前缀 国际标准单位”的字符串形式,如:
“0.0512V”和“50300V”分别表示为:“51.2mV”和“50.3kV”,
“0.00005Hz”和“5030000000Hz”分别表示为:“50uHz”和“5.03GHz”
在这种表达形式中,数值部分取值范围为[1-1000]之间,单位前缀部分为在基准单位的基础上与1000成比例后换算的前缀字符。前面在“C/C 语言编程系列”中已经给出了C语言的实现代码,这儿给出使用Python语言编程实现同样功能的代码。
解决思路先说一下解决思路,从数学推导的角度去思考这个问题,若将一个数值num表示为1000的x次方,那么我们可以求出x的值为:
假如求得的x=1.3,那么说明了num的值在以下区间内:
所以只要原值num除以1000的1次幂就可以将数值部分转换到[1----1000]之间的值了,这儿的1次幂是由x值1.3向下取整floor(x)得到的。
通过分析,在将数值表示为“数值 单位前缀 国际标准单位”的字符串形式时,数值部分为原值num除以1000的幂,单位前缀可在列表中索引得到,国际标准单位根据数据的实际物理意义给出即可。
Python函数代码实现定义的Num2Str函数代码如下图所示:
导入numpy库作log运算,所有的单位前缀定义在列表prefixs中,基准单位的数值在数组中的索引为8,所以单位前缀部分只需取列表中索引(x 8)对应的值就可以了。
测试结果使用上面的Num2Str函数,对于本文开头提出的例子,完整的测试代码如下:
运行结果如下:
从代码量上可以看出,这种实现方式相对于C/C 语言更为简洁明了,充分体现了Python动态语言的优势。
备注国际单位制中所有单位前缀的汇总表如下:
欢迎加关注,共同交流。