C语言编程系列004——将数值转为带国际单位的字符串方法2

问题提出

在上篇文章中,已经提到了一种方法,将一个数值转为带国际单位的字符串形式,即“数值+单位前缀+单位”的形式,其中,数值部分取值范围为[1-1000]之间,单位前缀部分为在基准单位的基础上与1000成比例后换算的前缀字符。

如“0.0512V”和“50300V”分别表示为“51.2mV”和“50.3kV”,再如“0.00005Hz”和“5030000000Hz”分别表示为“50uHz”和“5.03GHz”等。本文再次介绍一种更为简洁的实现方法,来编程实现同样的功能。

解决方法

可以从数学的角度去思考这个问题,若将一个数值num表示为1000的x次方,那么我们可以求出x的值为:

假如求得的x=1.2,则说明num的值肯定在以下区间:

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

由于单位前缀的数组定义为:

基准单位的数值在数组中的索引为8,所以即数值部分只需要取为floor(x)+8就可以了。

根据上面的思路,很容易得到这种方案的函数实现代码:

测试结论

同上篇文章相同,使用上面的函数“string Num2Str(double num, string unit)”,对于本文开头提出的例子,完整的测试代码如下:

运行结果如下:

从代码上可以看出,这种实现方式更为简洁明了。

备注

下图是国际单位制单位前缀的汇总表:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180905A0CE0900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券