• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hackingwu
V2EX  ›  程序员

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

  •  
  •   hackingwu ·
    hackingwu · Sep 23, 2020 · 4641 views
    This topic created in 2242 days ago, the information mentioned may be changed or developed.

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

    26 replies  •  2020-09-23 19:15:59 +08:00
    opengps
    opengps
    Sep 23, 2020 via Android
    1
    其实,对于你的数据规模来讲,未必需要在乎这 2 个字节的节省
    建议你先评估下数据规模有多大,是否真的需要省空间,然后才考虑是否可以用 cpu 换硬盘
    opengps
    opengps
    Sep 23, 2020 via Android
    2
    换句话说,硬盘比 CPU 便宜,一般推荐存储上选用最方便的数据结构。
    你硬盘紧张就把表设计的紧凑点,CPU 紧张就尽量少做运算
    WaldenHorizon
    WaldenHorizon
    Sep 23, 2020
    3
    我是乘以 100 存整数了,感觉做统计计算时比浮点数速度会快一点
    coderluan
    coderluan
    Sep 23, 2020
    4
    你不说具体场景和目的, 那就是都行.
    securityCoding
    securityCoding
    Sep 23, 2020
    5
    int/long , 来自互金公司的经验
    redtea
    redtea
    Sep 23, 2020 via iPhone
    6
    起码乘 10000,否则哪天改成保留 4 位,那就太麻烦了。
    la2la
    la2la
    Sep 23, 2020
    7
    @redtea 哈哈,真实
    wysnylc
    wysnylc
    Sep 23, 2020
    8
    你猜 decimal 为什么要被发明出来?
    keepeye
    keepeye
    Sep 23, 2020
    9
    涉及到钱的最好存整数
    justseemore
    justseemore
    Sep 23, 2020
    10
    @securityCoding 同来自前互金公司的经验 decimal 18,6 bcmath 处理
    IvanLi127
    IvanLi127
    Sep 23, 2020 via Android
    11
    哪天换算错了就完了,还是存 decimal 吧
    mxT52CRuqR6o5
    mxT52CRuqR6o5
    Sep 23, 2020 via Android
    12
    要看具体业务的
    xuanbg
    xuanbg
    Sep 23, 2020
    13
    decimal 就是干这个的
    May725
    May725
    Sep 23, 2020 via iPhone
    14
    考虑具体业务、预估数据规模、以及将来可能的需求变化,综合考虑吧
    reus
    reus
    Sep 23, 2020 via Android
    15
    用 decimal 不需要记得换算,不记得换算的话,可能会有百倍的损失。
    当然选 decimal,存储很贵吗?你省下的存储,都变成了潜在的风险,有代价的。
    KarlChen2015
    KarlChen2015
    Sep 23, 2020
    16
    显然选择 decimal
    如果一个新人不知道✖️100 的设计,后果不堪设想
    winglight2016
    winglight2016
    Sep 23, 2020
    17
    @KarlChen2015 我想起之前在 v2 上就有个实习生发了一个帖子说自己计算汇率忘记这个*100 的操作,给公司造成了上千万的损失。。。
    InkStone
    InkStone
    Sep 23, 2020
    18
    不需要极限压榨性能和存储的话,肯定是怎么直观怎么来,不要添加额外的思维负担
    daozhihun
    daozhihun
    Sep 23, 2020
    19
    曾经做过的某负责处理钱的模块都是存的 decimal 。当然存 long/int 也可以(建议乘以 10000 或者 1000000 ),可以提升一点性能,但个人认为现在的处理能力不用考虑那点性能,个人还是偏好 decimal
    Chappako
    Chappako
    Sep 23, 2020
    20
    @zpfhbyx #10 同 decimal + bcmath 处理
    dr1q65MfKFKHnJr6
    dr1q65MfKFKHnJr6
    Sep 23, 2020
    21
    不管什么场景, 直接按类型存吧。
    decimal 发明出来 不就是为了处理浮点数的?
    Veneris
    Veneris
    Sep 23, 2020
    22
    以微信和美团的数据结构看,都是以分做单位。
    newmlp
    newmlp
    Sep 23, 2020
    23
    建议 decimal,int 容易出 bug,到处都要换算,万一哪里忘了找起来也麻烦
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    Sep 23, 2020 via iPhone
    24
    跟钱有关的不用 decimal 是真的心大
    lululau
    lululau
    Sep 23, 2020 via iPhone
    25
    int*100 是空间和时间兼得吧,缺点是需要自己换算倍数关系,但是从运行效率上讲,int*100 应该比 bigdecimal 快吧
    sheeta
    sheeta
    Sep 23, 2020
    26
    看看腾讯,支付宝它们是怎么做的不就行了呗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1401 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 17:16 · PVG 01:16 · LAX 09:16 · JFK 12:16
    ♥ Do have faith in what you're doing.