
支付相关存储金额的数据库字段,用整型还是 Decimal?
整型要转为分,能不能用 Decimal 呢?
Decimal 会不会最后帐配不平?
1 jackyin 2019-09-27 10:51:56 +08:00 金额用整型存储分比较好,显示金额转化为元即可,传输、存储最好都用整型分。 |
2 U7Q5tLAex2FI0o0g 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 |