我有一个字段要保留 2 位小数,我是按照 decimal(4,2)来存,还是乘以 100,按照 int 来存,返回给使用者的时候在做个转换。目的是 decimal(4,2)占了 8bytes,int 才 4bytes, 我这个表有 10 来个 decimal 的字段。
![]() | 1 opengps 2020-09-23 09:30:15 +08:00 via Android 其实,对于你的数据规模来讲,未必需要在乎这 2 个字节的节省 建议你先评估下数据规模有多大,是否真的需要省空间,然后才考虑是否可以用 cpu 换硬盘 |
![]() | 2 opengps 2020-09-23 09:35:50 +08:00 via Android 换句话说,硬盘比 CPU 便宜,一般推荐存储上选用最方便的数据结构。 你硬盘紧张就把表设计的紧凑点,CPU 紧张就尽量少做运算 |
![]() | 3 wangritian 2020-09-23 09:42:00 +08:00 我是乘以 100 存整数了,感觉做统计计算时比浮点数速度会快一点 |
![]() | 4 coderluan 2020-09-23 10:18:03 +08:00 你不说具体场景和目的, 那就是都行. |
5 securityCoding 2020-09-23 10:22:17 +08:00 int/long , 来自互金公司的经验 |
![]() | 6 redtea 2020-09-23 10:36:56 +08:00 via iPhone 起码乘 10000,否则哪天改成保留 4 位,那就太麻烦了。 |
![]() | 8 wysnylc 2020-09-23 10:39:19 +08:00 你猜 decimal 为什么要被发明出来? |
![]() | 9 keepeye 2020-09-23 10:44:21 +08:00 涉及到钱的最好存整数 |
![]() | 10 justseemore 2020-09-23 11:42:47 +08:00 @securityCoding 同来自前互金公司的经验 decimal 18,6 bcmath 处理 |
![]() | 11 IvanLi127 2020-09-23 11:49:55 +08:00 via Android 哪天换算错了就完了,还是存 decimal 吧 |
12 mxT52CRuqR6o5 2020-09-23 11:59:22 +08:00 via Android 要看具体业务的 |
![]() | 13 xuanbg 2020-09-23 11:59:32 +08:00 decimal 就是干这个的 |
![]() | 14 May725 2020-09-23 12:50:11 +08:00 via iPhone 考虑具体业务、预估数据规模、以及将来可能的需求变化,综合考虑吧 |
![]() | 15 reus 2020-09-23 14:30:14 +08:00 via Android 用 decimal 不需要记得换算,不记得换算的话,可能会有百倍的损失。 当然选 decimal,存储很贵吗?你省下的存储,都变成了潜在的风险,有代价的。 |
![]() | 16 KarlChen2015 2020-09-23 15:55:15 +08:00 显然选择 decimal 如果一个新人不知道100 的设计,后果不堪设想 |
![]() | 17 winglight2016 2020-09-23 17:00:04 +08:00 @KarlChen2015 我想起之前在 v2 上就有个实习生发了一个帖子说自己计算汇率忘记这个*100 的操作,给公司造成了上千万的损失。。。 |
![]() | 18 InkStone 2020-09-23 17:03:11 +08:00 不需要极限压榨性能和存储的话,肯定是怎么直观怎么来,不要添加额外的思维负担 |
19 daozhihun 2020-09-23 17:04:57 +08:00 曾经做过的某负责处理钱的模块都是存的 decimal 。当然存 long/int 也可以(建议乘以 10000 或者 1000000 ),可以提升一点性能,但个人认为现在的处理能力不用考虑那点性能,个人还是偏好 decimal |
![]() | 21 dr1q65MfKFKHnJr6 2020-09-23 17:41:35 +08:00 不管什么场景, 直接按类型存吧。 decimal 发明出来 不就是为了处理浮点数的? |
![]() | 22 Veneris &nbs;2020-09-23 17:46:50 +08:00 以微信和美团的数据结构看,都是以分做单位。 |
![]() | 23 newmlp 2020-09-23 18:38:52 +08:00 建议 decimal,int 容易出 bug,到处都要换算,万一哪里忘了找起来也麻烦 |
![]() | 24 F281M6Dh8DXpD1g2 2020-09-23 18:45:41 +08:00 via iPhone 跟钱有关的不用 decimal 是真的心大 |
![]() | 25 lululau 2020-09-23 18:56:15 +08:00 via iPhone int*100 是空间和时间兼得吧,缺点是需要自己换算倍数关系,但是从运行效率上讲,int*100 应该比 bigdecimal 快吧 |
![]() | 26 sheeta 2020-09-23 19:15:59 +08:00 看看腾讯,支付宝它们是怎么做的不就行了呗 |