金额精度问题
背景:本文以企业级区块链应用Quorum为例子(该应用由golang编写),说明了如何解决金额精度的问题。
金额精度问题是每一位金融系统开发者要面临的问题,从笔者入行开始,从银行系统,互联网支付公司系统,一直到区块链金融应用,这个问题无处不在。针对此典型问题典型解法如下。
具体例子
工行账户黄金应用(真实存在的应用)的金额单位定义成float64,会在实际中造成什么问题?effective java有提到这个问题的,会造成如下严重后果(我用golang改写如下):
package main
import "fmt"
const TEN_CENTS float64 = 0.1
func main() {
var itemBought int = 0
var myfund float64 = 1.00
for price := TEN_CENTS; price < myfund; price += TEN_CENTS {
itemBought++
myfund -= price
fmt.Println("loop")
}
fmt.Println("买到的东西:", itemBought, " 剩余的金额:", myfund)
}
如果用**“go run”**命令运行这个文件会有如下提示输出
vincent@zheng450:~/gopath$ go run currency.go
loop
loo