关于金额的字段在数据库中你们是用什么类型存储的?
之前一直是在用 decimal
来存储关于金钱的字段的,然而,昨天看到一篇文章,在里面金额是用 int
整型来存储的,其下面的讨论也挺激烈的。
总结来说用整型来存储的好处就是
避免浮点数在高精度计算是的精度问题,php 中有 BC Math,但是像在 JavaScript 中就会出现 1.0 - 0.9 = 0.09999999999999998 的现象
但是在处理有些折扣什么的场景的除运算时又会因为缺少精度,变得麻烦
现在用哪种还真是有些迷糊……
同 decimal
decimal
string 使用get set来限制金额,有更大的发挥空间
int 化成分
无符号整型,单位是分
用什么都行,js 中有精度的解决方案
1.RMB最小单位是1分,可以
金额*100
存整型,这样就能避免出现精度丢失的问题;2.最常见的是使用decimal,例如decimal(20,2),一定要固定长度,10.12,9.80,不然长度不固定很有可能出现计算后精度丢失的问题;
3.还可以存字符类型,比如把计算结果处理好以后的结果转成字符串类型
最小单位为1
参照微信支付,最小单位为分。
老老实实用
decimal
一把梭,用BC函数
,使用int
你要处理的事情更多,何必加重自己的工作量,换算来换算去,换到最后你自己头脑发懵,系统崩盘我们是int 单位都是分,所有逻辑全靠后台处理
我们也是 int / 1000 .. 最开始用不到。。然后经过业务的增加。 还真挺有用。。
int + 值对象进行封装
int最大长度 分为单位
金额换算时封装好类 对于长期项目打算更加友好