支付相关存储金额的数据库字段,用整型还是 Decimal?

2019-09-27 10:42:37 +08:00
 dzmcs

支付相关存储金额的数据库字段,用整型还是 Decimal?

整型要转为分,能不能用 Decimal 呢?

Decimal 会不会最后帐配不平?

7688 次点击
所在节点    问与答
21 条回复
jackyin
2019-09-27 10:51:56 +08:00
金额用整型存储分比较好,显示金额转化为元即可,传输、存储最好都用整型分。
littleylv
2019-09-27 10:53:40 +08:00
肯定用整型,没的讨论的,结贴
b821025551b
2019-09-27 10:54:47 +08:00
别用 Decimal,decimal 读到业务层还是 float,各种分账转换后还是出问题;金额永远是 int,业务层最后展示再转成元。
l00t
2019-09-27 10:57:23 +08:00
什么数据库?整型是多长?

这俩本身没有什么实质差别。用 Decimal 更方便一些。
dzmcs
2019-09-27 11:05:18 +08:00
@l00t
postgresql,现在很多语言也有 Decimal 类型,但是都说用整型,了解一下有没有用 Decimal 类型的
kidtest
2019-09-27 11:06:50 +08:00
一般精确到分足够用了吧,直接乘以 100 存整形
gfreezy
2019-09-27 11:11:04 +08:00
用户端精确到分够了,但是涉及到分佣,1 分钱乘个 3% 啥的,怎么也得小数点后 5 6 位。除非合同规则里面写明精确到分,四舍五入。
gfreezy
2019-09-27 11:11:41 +08:00
我们系统直接用了 Decimal,但是这样要求所有地方的代码也得都用 Decimal
wysnylc
2019-09-27 11:18:37 +08:00
用 Decimal,代码也用 Decimal 就行
用整型拆分的多此一举,没 Decimal 的时候没办法,有 Decimal 还这么做就跟不上时代了
passerbytiny
2019-09-27 11:19:56 +08:00
只要不用浮点,都行。

当然,在没有最终性能优化需要的情况下,数据库请尽量用可读性好的数据,带少量小数位的数值就用 Decimal/Number/Numeric 类型,日期时间就用 Date/DateTime 类型。不过如果你对应的编程语言没有十进制对应的类型,那么就像前 3 楼那样用替代类型(金额放大成整数,时间用时间戳,日期用整数)好了。

一般来说,金额是必定用十进制类型的,除了不用转换外,在精度控制和四舍五入上也很方便。
l00t
2019-09-27 11:21:09 +08:00
@dzmcs #5 那至少得 bigint 了。单 int 是不够用的。也可以考虑用 decimal 或者 numeric,这俩本身也是同一回事。帐配不平的事情是不存在的,不用多虑。帐要是不平,肯定是你们程序自己出了问题,而不是 decimal 的数据类型问题。
randyo
2019-09-27 11:28:26 +08:00
记得 c#有 decimal 类型。以前用 double 老是算错,换了 decimal 就没问题了。
Raymon111111
2019-09-27 11:31:15 +08:00
整型处理简单不容易出错

帐不平那是程序逻辑的问题吧, 这里多了一分肯定是另外一个地方要扣一分啊
bk201
2019-09-27 11:33:49 +08:00
那问题来了,日期你们用整型还是 datetime
efaun
2019-09-27 11:37:50 +08:00
整型,存分
IMCA1024
2019-09-27 15:53:12 +08:00
财务系统,用的 decimal。 存储多几位而已
IMCA1024
2019-09-27 15:53:38 +08:00
@IMCA1024 小数点后,多存几位
rockyou12
2019-09-27 15:59:51 +08:00
我们的系统数据库钱和库存都是用 decimal,代码里是 java,用 bigdecimal
ytmsdy
2019-09-27 16:19:50 +08:00
金额强烈建议用 int,之前有个项目觉得用 decimal 好像也没问题,但是实际当金额进行折扣计算,还是会出现四舍五入的问题。单单为了这个增加了不知道多少的工作量
qdyoungk
2019-09-27 17:40:28 +08:00
科蓝用 Decimal

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/604709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX