Python语言编程系列009——数值转带单位前缀字符串方法

问题背景

在常用的诸如示波器、频谱仪、接收机等电子测量仪器中,当借助于游标读取波形图曲线上某点数据值时,显示结果一般为“数值+单位前缀+国际标准单位”的字符串形式,如:

“0.0512V”和“50300V”分别表示为:“51.2mV”和“50.3kV”,

“0.00005Hz”和“5030000000Hz”分别表示为:“50uHz”和“5.03GHz”

在这种表达形式中,数值部分取值范围为[1-1000]之间,单位前缀部分为在基准单位的基础上与1000成比例后换算的前缀字符。这儿给出使用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动态语言的优势。

备注

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

欢迎加关注,共同交流。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180919A0MJGD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励