我有个一个保留 2 位小数的浮点数需要保存, 我是把它乘以 100,按照 int 存,还是按照 decimal(4,2)来存?

2020-09-23 09:28:09 +08:00
 hackingwu

我有一个字段要保留 2 位小数,我是按照 decimal(4,2)来存,还是乘以 100,按照 int 来存,返回给使用者的时候在做个转换。目的是 decimal(4,2)占了 8bytes,int 才 4bytes, 我这个表有 10 来个 decimal 的字段。

3425 次点击
所在节点    程序员
26 条回复
opengps
2020-09-23 09:30:15 +08:00
其实,对于你的数据规模来讲,未必需要在乎这 2 个字节的节省
建议你先评估下数据规模有多大,是否真的需要省空间,然后才考虑是否可以用 cpu 换硬盘
opengps
2020-09-23 09:35:50 +08:00
换句话说,硬盘比 CPU 便宜,一般推荐存储上选用最方便的数据结构。
你硬盘紧张就把表设计的紧凑点,CPU 紧张就尽量少做运算
wangritian
2020-09-23 09:42:00 +08:00
我是乘以 100 存整数了,感觉做统计计算时比浮点数速度会快一点
coderluan
2020-09-23 10:18:03 +08:00
你不说具体场景和目的, 那就是都行.
securityCoding
2020-09-23 10:22:17 +08:00
int/long , 来自互金公司的经验
redtea
2020-09-23 10:36:56 +08:00
起码乘 10000,否则哪天改成保留 4 位,那就太麻烦了。
la2la
2020-09-23 10:38:51 +08:00
@redtea 哈哈,真实
wysnylc
2020-09-23 10:39:19 +08:00
你猜 decimal 为什么要被发明出来?
keepeye
2020-09-23 10:44:21 +08:00
涉及到钱的最好存整数
zpfhbyx
2020-09-23 11:42:47 +08:00
@securityCoding 同来自前互金公司的经验 decimal 18,6 bcmath 处理
IvanLi127
2020-09-23 11:49:55 +08:00
哪天换算错了就完了,还是存 decimal 吧
mxT52CRuqR6o5
2020-09-23 11:59:22 +08:00
要看具体业务的
xuanbg
2020-09-23 11:59:32 +08:00
decimal 就是干这个的
May725
2020-09-23 12:50:11 +08:00
考虑具体业务、预估数据规模、以及将来可能的需求变化,综合考虑吧
reus
2020-09-23 14:30:14 +08:00
用 decimal 不需要记得换算,不记得换算的话,可能会有百倍的损失。
当然选 decimal,存储很贵吗?你省下的存储,都变成了潜在的风险,有代价的。
KarlChen2015
2020-09-23 15:55:15 +08:00
显然选择 decimal
如果一个新人不知道✖️100 的设计,后果不堪设想
winglight2016
2020-09-23 17:00:04 +08:00
@KarlChen2015 我想起之前在 v2 上就有个实习生发了一个帖子说自己计算汇率忘记这个*100 的操作,给公司造成了上千万的损失。。。
InkStone
2020-09-23 17:03:11 +08:00
不需要极限压榨性能和存储的话,肯定是怎么直观怎么来,不要添加额外的思维负担
daozhihun
2020-09-23 17:04:57 +08:00
曾经做过的某负责处理钱的模块都是存的 decimal 。当然存 long/int 也可以(建议乘以 10000 或者 1000000 ),可以提升一点性能,但个人认为现在的处理能力不用考虑那点性能,个人还是偏好 decimal
Chappako
2020-09-23 17:07:53 +08:00
@zpfhbyx #10 同 decimal + bcmath 处理

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

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

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

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

© 2021 V2EX