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

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

相关文章

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

  1. 其实,对于你的数据规模来讲,未必需要在乎这 2 个字节的节省
    建议你先评估下数据规模有多大,是否真的需要省空间,然后才考虑是否可以用 cpu 换硬盘

  2. 换句话说,硬盘比 CPU 便宜,一般推荐存储上选用最方便的数据结构。
    你硬盘紧张就把表设计的紧凑点,CPU 紧张就尽量少做运算

  3. 用 decimal 不需要记得换算,不记得换算的话,可能会有百倍的损失。
    当然选 decimal,存储很贵吗?你省下的存储,都变成了潜在的风险,有代价的。

  4. @KarlChen2015 我想起之前在 v2 上就有个实习生发了一个帖子说自己计算汇率忘记这个*100 的操作,给公司造成了上千万的损失。。。

  5. 曾经做过的某负责处理钱的模块都是存的 decimal 。当然存 long/int 也可以(建议乘以 10000 或者 1000000 ),可以提升一点性能,但个人认为现在的处理能力不用考虑那点性能,个人还是偏好 decimal

  6. int*100 是空间和时间兼得吧,缺点是需要自己换算倍数关系,但是从运行效率上讲,int*100 应该比 bigdecimal 快吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注