支付相关存储金额的数据库字段,用整型还是 Decimal?
整型要转为分,能不能用 Decimal 呢?
Decimal 会不会最后帐配不平?
1
jackyin 2019-09-27 10:51:56 +08:00 1
金额用整型存储分比较好,显示金额转化为元即可,传输、存储最好都用整型分。
|
2
littleylv 2019-09-27 10:53:40 +08:00
肯定用整型,没的讨论的,结贴
|
3
b821025551b 2019-09-27 10:54:47 +08:00
别用 Decimal,decimal 读到业务层还是 float,各种分账转换后还是出问题;金额永远是 int,业务层最后展示再转成元。
|
4
l00t 2019-09-27 10:57:23 +08:00
什么数据库?整型是多长?
这俩本身没有什么实质差别。用 Decimal 更方便一些。 |
5
dzmcs OP @l00t
postgresql,现在很多语言也有 Decimal 类型,但是都说用整型,了解一下有没有用 Decimal 类型的 |
6
kidtest 2019-09-27 11:06:50 +08:00
一般精确到分足够用了吧,直接乘以 100 存整形
|
7
gfreezy 2019-09-27 11:11:04 +08:00
用户端精确到分够了,但是涉及到分佣,1 分钱乘个 3% 啥的,怎么也得小数点后 5 6 位。除非合同规则里面写明精确到分,四舍五入。
|
8
gfreezy 2019-09-27 11:11:41 +08:00
我们系统直接用了 Decimal,但是这样要求所有地方的代码也得都用 Decimal
|
9
wysnylc 2019-09-27 11:18:37 +08:00
用 Decimal,代码也用 Decimal 就行
用整型拆分的多此一举,没 Decimal 的时候没办法,有 Decimal 还这么做就跟不上时代了 |
10
passerbytiny 2019-09-27 11:19:56 +08:00
只要不用浮点,都行。
当然,在没有最终性能优化需要的情况下,数据库请尽量用可读性好的数据,带少量小数位的数值就用 Decimal/Number/Numeric 类型,日期时间就用 Date/DateTime 类型。不过如果你对应的编程语言没有十进制对应的类型,那么就像前 3 楼那样用替代类型(金额放大成整数,时间用时间戳,日期用整数)好了。 一般来说,金额是必定用十进制类型的,除了不用转换外,在精度控制和四舍五入上也很方便。 |
11
l00t 2019-09-27 11:21:09 +08:00
@dzmcs #5 那至少得 bigint 了。单 int 是不够用的。也可以考虑用 decimal 或者 numeric,这俩本身也是同一回事。帐配不平的事情是不存在的,不用多虑。帐要是不平,肯定是你们程序自己出了问题,而不是 decimal 的数据类型问题。
|
12
randyo 2019-09-27 11:28:26 +08:00 via Android
记得 c#有 decimal 类型。以前用 double 老是算错,换了 decimal 就没问题了。
|
13
Raymon111111 2019-09-27 11:31:15 +08:00
整型处理简单不容易出错
帐不平那是程序逻辑的问题吧, 这里多了一分肯定是另外一个地方要扣一分啊 |
14
bk201 2019-09-27 11:33:49 +08:00
那问题来了,日期你们用整型还是 datetime
|
15
efaun 2019-09-27 11:37:50 +08:00
整型,存分
|
16
IMCA1024 2019-09-27 15:53:12 +08:00
财务系统,用的 decimal。 存储多几位而已
|
18
rockyou12 2019-09-27 15:59:51 +08:00
我们的系统数据库钱和库存都是用 decimal,代码里是 java,用 bigdecimal
|
19
ytmsdy 2019-09-27 16:19:50 +08:00
金额强烈建议用 int,之前有个项目觉得用 decimal 好像也没问题,但是实际当金额进行折扣计算,还是会出现四舍五入的问题。单单为了这个增加了不知道多少的工作量
|
20
qdyoungk 2019-09-27 17:40:28 +08:00
科蓝用 Decimal
|