財務(wù)或財務(wù)系統(tǒng)數(shù)值精度設(shè)計
編輯導(dǎo)語:如今隨著互聯(lián)網(wǎng)的不斷發(fā)展,我們開始使用一些財務(wù)系統(tǒng)進行交易;在財務(wù)系統(tǒng)中,對于這些數(shù)值的計算精度需要非常注意,商品資金等等交易都具有嚴(yán)謹性;本文作者分享了關(guān)于財務(wù)系統(tǒng)數(shù)值精度設(shè)計,我們一起來了解一下。
一、類型
- 計量型數(shù)值
- 結(jié)算型數(shù)值
- 計算型數(shù)值
計量型數(shù)值即通常說的數(shù)量,數(shù)值的后面會有一個計量單位,兩者共同來描述(實體/虛擬)物品。
交易雙方在資金給付時使用的資金數(shù)值為結(jié)算型數(shù)值,結(jié)算型數(shù)值由交易雙方約定,并且受到貨幣最小支付單位的限制。稅額、金額、合計金額都是結(jié)算型金額。
舉個例子:A 向 B 購買商品 XX 5 件,每件商品 ¥1.01。理論上 A 應(yīng)該向 B 支付 ¥5.05 ,B 和 A 說我們結(jié)算到元即可,那么 A 只需要支付 ¥5.00 向 B 就行了。
由于人民幣最小的支付單位是分,我們就只能定義分以上的單位結(jié)算。此時如果改為比特幣支付,最小單位就是聰,1聰=0.00000001比特幣。
最后是計算型數(shù)值,這種類型的數(shù)值往往是系統(tǒng)設(shè)計過程中最容易出問題的。因為結(jié)算型的數(shù)值絕大部分是由計量型數(shù)值和計算型數(shù)值計算后得出的結(jié)果,計量值是一個物理上的結(jié)果不具有可變性,要保證結(jié)算數(shù)值的準(zhǔn)確就必須保證計算型數(shù)值的準(zhǔn)確。不含稅價就是計算型數(shù)值。
二、精度為什么重要
在一次交易中,購買方向銷售方購買多個商品,每個商品有一個固定的價格,價格乘購買數(shù)量得出這個商品的交易金額;再把所有的商品交易金額相加后得出此次交易的總金額,買賣雙方在根據(jù)總金額進行資金給付。
為什么一定要把每一個商品都計算出一個合計金額在結(jié)算呢,原因有兩個:①每個商品的銷售價格不同;②商品的屬性不同稅率也不相同,合法的交易中必須根據(jù)商品的稅率和無稅價格計算出稅額,開具發(fā)票并報稅。
此時就出現(xiàn)了無稅單價、含稅單價、不含稅金額、含稅金額、稅額、數(shù)量、合計金額這么多的與結(jié)算有關(guān)的數(shù)字,下面我們看看他們間的關(guān)系:
現(xiàn)實中我們描述的商品價格指的是含稅的價格,比如買個手機 ¥999.00 ,手機的實際價格為 ¥884.07 ,稅率為 13%,稅額為 ¥114.93。
再看一下購買汽油的情況,汽油的不含稅價格是一個8位的小數(shù),但油價(含稅價格)是 ¥6.90。發(fā)票單價小數(shù)是根據(jù)開票系統(tǒng)的設(shè)置來的,8位是一個常見的設(shè)定,也可以設(shè)置為更高精度。
一個準(zhǔn)確的精度能夠保證再整個計算的過程中能夠盡可能的避免乘除過程中的無限循環(huán)小數(shù)以及四舍五入造成的計算結(jié)果偏差。
三、精度設(shè)計
計量型數(shù)值:
計量型數(shù)值由用戶輸入,在現(xiàn)實中有一個固定的衡量標(biāo)準(zhǔn)。一般情況下3位小數(shù)可滿足需求,如果有更精確的計量系統(tǒng)要支持自定義精度。
計量型數(shù)值都是在前臺輸入或獲取的,不允許系統(tǒng)在后端重新計算或調(diào)整,所以不存在精度誤差問題。因為誤差已經(jīng)在線下解決。
計算型數(shù)值:
用戶不能直接修改,必須修改其它值后由系統(tǒng)計算得出結(jié)果。一般情況下 8 位小數(shù)即可保證計算精度,精度越高結(jié)果的準(zhǔn)確性也越高,考慮系統(tǒng)的計算性能和穩(wěn)定性盡可能支持更高精度。
結(jié)算型數(shù)值:
結(jié)算型數(shù)值的精度要根據(jù)貨幣交易的最小單位設(shè)計,人民幣小數(shù)點后兩位。這里誤差主要因為計算結(jié)果的的小數(shù)精度大于結(jié)算小數(shù)精度,一般采用誤差更小的四舍六入五成雙法舍棄多余的小數(shù)。
原文:小萊沃的博客
本文由 @小萊沃 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
稅額=不含稅金額*13%吧,圖里面寫的含稅金額
666