金融应用如何解决金额精度问题(以Quorum、golang为例)

金额精度问题

背景:本文以企业级区块链应用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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值