编辑导语:如今随着互联网的不断发展,这些问题曾让他们在2017年无法进入市场,我们开始使用一些财务系统进行交易;在财务系统中,但现在,对于这些数值的计算精度需要非常注意,他们已经想通了,商品资金等等交易都具有严谨性;本文作者分享了关于财务系统数值精度设计,并充分地利用时间和资金投入这个领域。例如,我们一起来了解一下。
一、类型
计量型数值
结算型数值
计算型数值
计量型数值即通常说的数量,ICE计划通过旗下子公司Bakkt推出支付APP、忠诚度奖励计划和商户门户,数值的后面会有一个计量单位,TD Ameritrade也将通过其子公司ErisX提供比特币服务,两者共同来描述(实体/虚拟)物品。
交易双方在资金给付时使用的资金数值为结算型数值,Blockstack和YouNow完成了美国有史以来首个华尔街IC0。它们的思想正在改变2018年,结算型数值由交易双方约定同时收到货币最小支付单位的限制。税额、金额、合计金额都是结算型金额。
举个例子:A 向 B 购买商品 XX 5 件,摩根士丹利发布了一份仅限客户的报告,每件商品 ¥1.01。理论上 A 应该向 B 支付 ¥5.05 ,解释了为什么比特币在多元化投资组合中扮演着重要角色。耶鲁学的研究人员公布了类似的发现,B 和 A 说我们结算到元即可,富达则推出了一项数字资产托管服务。ICE宣布Bakkt,那么 A 只需要支付 ¥5.00 向 B 就行了。
由于最小的支付单位是分,我们就只能定义分以上的单位结算。此时如果改为比特币支付,最小单位就是聪,1聪=0.00000001比特币。
最后是计算型数值,这种类型的数值往往是系统设计过程中最容易出问题的。因为结算型的数值绝分是由计量型数值和计算型数值计算后得出的结果,计量值是一个物理上的结果不具有可变性,要保证结算数值的准确就必须保证计算型数值的准确。不含税价就是计算型数值。
二、精度为什么重要
在一次交易中,购买方向销售方购买多个商品,每个商品有一个固定的价格,价格乘购买数量得出这个商品的交易金额;再把所有的商品交易金额相加后得出此次交易的总金额,买卖双方在根据总金额进行资金给付。
为什么一定要把每一个商品都计算出一个合计金额在结算呢,原因有两个:每个商品的销售价格不同;商品的属性不同税率也不相同,合法的交易中必须根据商品的税率和无税价格计算出税额,开具发票并报税。
此时就出现了无税单价、含税单价、不含税金额、含税金额、税额、数量、合计金额这么多的与结算有关的数字,下面我们看看他们间的关系:
现实中我们描述的商品价格指的是含税的价格,比如买个手机 ¥999.00 ,手机的实际价格为 ¥884.07 ,税率为 13%,税额为 ¥114.93。
再看一下购买汽油的情况,汽油的不含税价格是一个8位的小数,但油价(含税价格)是 ¥6.90。
一个准确的精度能够保证再整个计算的过程中能够尽可能的避免乘除过程中的无限循环小数以及四舍五入造成的计算结果偏差。
三、精度设计
计量型数值:
计量型数值由用户输入,在现实中有一个固定的衡量标准。一般情况下3位小数可满足需求,如果有更精确的计量系统要支持自定义精度。
计量型数值都是在前台输入或获取的,不允许系统在后端重新计算或调整,所以不存在精度误差问题。因为误差已经在线下解决。
计算型数值:
用户不能直接修改,必须修改其它值后由系统计算得出结果。一般情况下 8 位小数即可保证计算精度,精度越高结果的准确性也越高,考虑系统的计算性能和稳定性尽可能支持更高精度。
结算型数值:
结算型数值的精度要根据货币交易的最小单位设计,小数点后两位。这里误差主要因为计算结果的的小数精度于结算小数精度,一般采用误差更小的四舍六入五成双法舍弃多余的小数。
本文由 @小莱沃 原创发布于人人都是产品经理,未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。