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

Java 里要表示 decimal 类型,就是采用 BigDecimal 这个吗?

  •  
  •   xiaoyanbot · 2017-10-06 10:56:16 +08:00 · 18411 次点击
    这是一个创建于 2604 天前的主题,其中的信息可能已经有所发展或是发生改变。

    阿里的 Java 手册里写着:

    6.  [强制] 小数类型为 decimal,禁止使用 float 和 double。
    说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不
    正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
    

    具体到实现,decimal 是用 BigDecimal 这个实现吗? 还是 Java 里有 decimal 这个类型?

    5 条回复    2017-10-08 11:32:51 +08:00
    depress
        1
    depress  
       2017-10-06 11:44:03 +08:00
    就是 BigDecimal
    SoulSleep
        2
    SoulSleep  
       2017-10-06 20:37:21 +08:00
    是。目测这是阿里的 Java 规范啊...

    不要用 Double 初始化一个 BigDecimal 对象
    建议能用纯整数时,不用小数。因为...Double 丢失精度这个 feature,并不是所有人都知道....
    jhdxr
        3
    jhdxr  
       2017-10-06 21:29:33 +08:00
    被你的 这个问题刷屏了,不知道你为什么同时在这么多语言的板块里问一个 MySQL 的问题。

    你贴的这一段规范适用于且仅适用于 MySQL。
    你贴的这一段规范适用于且仅适用于 MySQL。
    你贴的这一段规范适用于且仅适用于 MySQL。

    别的数据库 /语言,也许有(或者说一般都有)专门的类库或方式处理浮点数精度的问题,但它真不一定叫 decimal。
    loveCoding
        4
    loveCoding  
       2017-10-07 14:31:03 +08:00
    阿里这份手册如果没有经验看了是没用的
    abcbuzhiming
        5
    abcbuzhiming  
       2017-10-08 11:32:51 +08:00
    java 有 float,double,BigDecimal 三种,前两者会损失精度,最后一个是专门用于高精度计算的大数类型,但是会损失性能。如果用于金融场合且小数位并不多的时候,可以考虑 BigDecimal,但是如果小数位较多,建议整体变成 BigInt
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2724 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:31 · PVG 20:31 · LAX 04:31 · JFK 07:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.