关于金额的字段在数据库中你们是用什么类型存储的?

之前一直是在用 decimal 来存储关于金钱的字段的,然而,昨天看到一篇文章,在里面金额是用 int 整型来存储的,其下面的讨论也挺激烈的。

总结来说用整型来存储的好处就是
避免浮点数在高精度计算是的精度问题,php 中有 BC Math,但是像在 JavaScript 中就会出现 1.0 - 0.9 = 0.09999999999999998 的现象

但是在处理有些折扣什么的场景的除运算时又会因为缺少精度,变得麻烦

现在用哪种还真是有些迷糊……

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 14
小李世界

同 decimal

2个月前 评论

string 使用get set来限制金额,有更大的发挥空间

2个月前 评论
Su (楼主) 2个月前
chowjiawei (作者) 2个月前

int 化成分

2个月前 评论

无符号整型,单位是分

2个月前 评论
haaid

用什么都行,js 中有精度的解决方案

2个月前 评论

1.RMB最小单位是1分,可以金额*100存整型,这样就能避免出现精度丢失的问题;

2.最常见的是使用decimal,例如decimal(20,2),一定要固定长度,10.12,9.80,不然长度不固定很有可能出现计算后精度丢失的问题;

3.还可以存字符类型,比如把计算结果处理好以后的结果转成字符串类型

2个月前 评论
Su (楼主) 2个月前
她来听我的演唱会 (作者) 2个月前
我爱大可乐

参照微信支付,最小单位为分。

2个月前 评论

老老实实用decimal一把梭,用BC函数,使用int你要处理的事情更多,何必加重自己的工作量,换算来换算去,换到最后你自己头脑发懵,系统崩盘

2个月前 评论
Alcohol 2个月前
Su (楼主) 2个月前
Larva 2个月前
4pmzzzzzzzzzz (作者) 2个月前

我们是int 单位都是分,所有逻辑全靠后台处理

2个月前 评论

我们也是 int / 1000 .. 最开始用不到。。然后经过业务的增加。 还真挺有用。。

2个月前 评论
Su (楼主) 2个月前
WhiteDragon (作者) 2个月前
xuding

int + 值对象进行封装

2个月前 评论

int最大长度 分为单位

金额换算时封装好类 对于长期项目打算更加友好

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!