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

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

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

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 14

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

2年前 评论

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

2年前 评论
Alcohol 2年前
Su (楼主) 2年前
Larva 2年前
OnlyRed (作者) 2年前

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

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

int + 值对象进行封装

2年前 评论

int最大长度 分为单位

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

2年前 评论

同 decimal

2年前 评论
chowjiawei

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

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

无符号整型,单位是分

2年前 评论

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

2年前 评论

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

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

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

2年前 评论
Su (楼主) 2年前
她来听我的演唱会 (作者) 2年前

最小单位为1

2年前 评论

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

2年前 评论

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