在软件开发过程中,接口联调是实现项目交互无法避免的,在联调过程中会出现一些数据之间的转换的问题,例如基本数据类型的转换、换算单位之间的转换等等,今天我们就通过金额分与元做切入点,聊一聊换算单位之间的转换!
前两天一个同事接到一个任务,A系统和另一个平台B做联调,业务是B平台入参调A系统接口,A系统经过一系列计算等等得出结果后返回给B,然而A系统金额单位是“分”,而B平台金额单位则是“元”,结果该同事就为何时将分转换为元,陷入了纠结之中。最后实在想不通,就找到了我。
他的疑虑是这样的:
100元*100元=10000元 两个100块相乘到最后得到的是10000块
换成分的话 10000分*10000分=100000000分 分再转换成元100000000分/100=1000000元
这样算的话数据就平白无故多了两个0,所以他最终认为设计到金额相关数据应该在在计算前换算好,我总觉得哪里有问题,可当时并没有找到问题出在哪里,所以当时便默许了他的方案。
这个问题在纠结了两天之后,终于有了答案,答案就是这小子不光自己钻牛角尖,连带着把我也带进沟里了。
先追溯到小学二年级的时候,我们学习乘法口诀的时候会有这样一道题:
一辆车一次可以拉10捆柴,10次可以拉多少捆?答案明显就是
10捆*10=100捆
在这道问题中,很明显,后面的乘数的单位并不是捆,二十次,最终的答案100捆每10次,也就是说10次可以拉100捆
根据这个线索继续思考,又思考到一个问题
1米*1米=1米? 很显然答案是否定的,结果是1平方米。无独有偶,压力/受力面积=压强......
最后得出了结论,在计算过程中,不光数据计算,单位也会跟着计算,所以
100元*100元≠10000元 而是 100元*100元=10000平方元
10000分*10000分≠100000000分 而是 10000分*10000分=100000000平方分=10000平方元
在回顾以往的编程时光,金额之间相乘并不存在,它就是个伪命题,例如五险一金、津贴、年终奖、订单金额等等,跟金额相乘的都只是系数而已,所以这个问题确实是钻牛角尖了!