V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
niceTeen84
V2EX  ›  Java

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

  •  
  •   niceTeen84 · 2020-04-17 14:35:26 +08:00 · 2719 次点击
    这是一个创建于 1663 天前的主题,其中的信息可能已经有所发展或是发生改变。
    10 条回复    2020-04-17 23:19:19 +08:00
    BreezeInWind
        1
    BreezeInWind  
       2020-04-17 14:55:22 +08:00
    价格存的可能比如 ¥123,234,45.00 这种类型?
    libook
        2
    libook  
       2020-04-17 14:56:04 +08:00 via Android
    为了避免浮点型数据精度误差,比如 0.1+0.2≠0.3 的问题。
    很多数据库和语言上都有十进制数据类型大多是基于字符串实现的数学计算,比原生数值类型计算慢很多,但能保证精度。

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

    所以常常通过转成字符串来处理,这就是 Decimal 这个类型做的事情。
    azcvcza
        6
    azcvcza  
       2020-04-17 15:19:12 +08:00
    计算机浮点数计算不精确
    fumichael
        7
    fumichael  
       2020-04-17 15:28:53 +08:00   ❤️ 1
    TimLang
        8
    TimLang  
       2020-04-17 15:30:15 +08:00
    有些后台用的是 big decimal, 在 json 里面返回可能被格式化成了 string 。
    conn4575
        9
    conn4575  
       2020-04-17 19:00:16 +08:00 via Android
    实际上标准做法就是使用字符串。。。
    Pythondr
        10
    Pythondr  
       2020-04-17 23:19:19 +08:00 via iPhone
    是的,避免精度丢失
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3364 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 291ms · UTC 11:02 · PVG 19:02 · LAX 03:02 · JFK 06:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.