问题提出
在上篇文章中,已经提到了一种方法,将一个数值转为带国际单位的字符串形式,即“数值+单位前缀+单位”的形式,其中,数值部分取值范围为[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)”,对于本文开头提出的例子,完整的测试代码如下:
运行结果如下:
从代码上可以看出,这种实现方式更为简洁明了。
备注
下图是国际单位制单位前缀的汇总表:
领取专属 10元无门槛券
私享最新 技术干货