我有一个字段要保留 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
zpfhbyx 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
cedoo22 2020-09-23 17:41:35 +08:00
不管什么场景, 直接按类型存吧。
decimal 发明出来 不就是为了处理浮点数的? |
22
Veneris 2020-09-23 17:46:50 +08:00
以微信和美团的数据结构看,都是以分做单位。
|
23
newmlp 2020-09-23 18:38:52 +08:00
建议 decimal,int 容易出 bug,到处都要换算,万一哪里忘了找起来也麻烦
|
24
liprais 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
看看腾讯,支付宝它们是怎么做的不就行了呗
|