代码里货币数字类型该用啥?float和decimal怎么选

作者:admin 2026-10-11 浏览:32
导读: 代码里货币数字类型该用啥?float和decimal怎么选写后端八年,碰过的支付系统少说二十几个,被货币数字类型坑过的同事没一百也有八十。float和double是二进制浮点数,天生表示不了0.金额一律存分,1元=100分,数据库字段一个bigint搞定。但有一条:别在代码里随手写个float就完事...

代码里货币数字类型该用啥?float和decimal怎么选

写后端八年,碰过的支付系统少说二十几个代码里货币数字类型该用啥?float和decimal怎么选,被货币数字类型坑过的同事没一百也有八十。很多新人觉得"不就是个数字吗",随手拿个float装一下,结果对账时差了几分钱,查了三天三夜才定位到根因。选错类型,代价远比你想象的大。

float和double是二进制浮点数,天生表示不了0.1。你写0.1+0.2,得到0.30000000000000004。别觉得无所谓代码中货币数字类型,用户余额跑上百万笔交易,误差会累积到真金白银级别。金融场景下,绝不能用浮点数存金额,这是底线。

decimal类型使用_代码中货币数字类型_后端开发

那用什么?decimal。C#的decimal是128位、29位有效数字,Java的BigDecimal同理,能精确表示0.01、0.001,四舍五入符合会计规范。银行核心系统、券商清算基本清一色用decimal或BigDecimal。运算速度确实慢于float,但钱的事,慢一点无所谓。

还有一种更"笨"但极稳的方案:用整型存最小单位。金额一律存"分",1元=100分,数据库字段一个bigint搞定。所有运算走整数加减,彻底绕开精度问题。我做过一个跨境电商结算模块,涉及七种货币换算,全用"厘"做整数运算,对账再没出过岔子。

选型没有标准答案,取决于你系统对精度、性能和团队习惯的取舍。但有一条:别在代码里随手写个float就完事了。你所在的项目,货币字段现在用的什么类型?有没有踩过精度坑的?

转载请注明出处:admin,如有疑问,请联系()。
本文地址:https://haideyongan.com/btaz/2651.html

相关文章