快捷搜索:  汽车  科技

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的值为:

python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)(1)

假如求得的x=1.3,那么说明了num的值在以下区间内:

python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)(2)

所以只要原值num除以1000的1次幂就可以将数值部分转换到[1----1000]之间的值了,这儿的1次幂是由x值1.3向下取整floor(x)得到的。

通过分析,在将数值表示为“数值 单位前缀 国际标准单位”的字符串形式时,数值部分为原值num除以1000的幂,单位前缀可在列表中索引得到,国际标准单位根据数据的实际物理意义给出即可。

Python函数代码实现

定义的Num2Str函数代码如下图所示:

python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)(3)

导入numpy库作log运算,所有的单位前缀定义在列表prefixs中,基准单位的数值在数组中的索引为8,所以单位前缀部分只需取列表中索引(x 8)对应的值就可以了。

测试结果

使用上面的Num2Str函数,对于本文开头提出的例子,完整的测试代码如下:

python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)(4)

运行结果如下:

python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)(5)

从代码量上可以看出,这种实现方式相对于C/C 语言更为简洁明了,充分体现了Python动态语言的优势。

备注

国际单位制中所有单位前缀的汇总表如下:

python数字转字符串并保留两位小数(Python语言编程系列009数值转为带国际单位前缀的字符串方法)(6)

欢迎加关注,共同交流。

猜您喜欢: