niceTeen84
V2EX  ›  Java

请教一个问题,为何价格这个属性有时使用 String 类型?

  •  
  •   niceTeen84 · Apr 17, 2020 · 3517 views
    This topic created in 2224 days ago, the information mentioned may be changed or developed.
    10 replies    2020-04-17 23:19:19 +08:00
    BreezeInWind
        1
    BreezeInWind  
       Apr 17, 2020
    价格存的可能比如 ¥123,234,45.00 这种类型?
    libook
        2
    libook  
       Apr 17, 2020 via Android
    为了避免浮点型数据精度误差,比如 0.1+0.2≠0.3 的问题。
    很多数据库和语言上都有十进制数据类型大多是基于字符串实现的数学计算,比原生数值类型计算慢很多,但能保证精度。

    当然还有用整型的,然后以分为单位,比如 1 元钱记为 100,不过遇到除法可能还是有精度不足的问题。
    qiayue
        3
    qiayue  
    PRO
       Apr 17, 2020
    要具体情况具体分析,举例我们行业特殊,价格到厘,所以价格乘以 10000 存 int,然后发现最多只能存 21 万,最后又换成 bigint 了。
    yukiloh
        4
    yukiloh  
       Apr 17, 2020 via Android
    长见识了,我只遇到分做单位的场景,还有厘…
    Vegetable
        5
    Vegetable  
       Apr 17, 2020
    1. 计算机浮点数误差,0.6000000000000001 这种见过吧
    2. 传统的‘数’是由上限的,可能会溢出

    所以常常通过转成字符串来处理,这就是 Decimal 这个类型做的事情。
    azcvcza
        6
    azcvcza  
       Apr 17, 2020
    计算机浮点数计算不精确
    fumichael
        7
    fumichael  
       Apr 17, 2020   ❤️ 1
    TimLang
        8
    TimLang  
       Apr 17, 2020
    有些后台用的是 big decimal, 在 json 里面返回可能被格式化成了 string 。
    conn4575
        9
    conn4575  
       Apr 17, 2020 via Android
    实际上标准做法就是使用字符串。。。
    Pythondr
        10
    Pythondr  
       Apr 17, 2020 via iPhone
    是的,避免精度丢失
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5175 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 05:59 · PVG 13:59 · LAX 22:59 · JFK 01:59
    ♥ Do have faith in what you're doing.