xiaoyanbot
V2EX  ›  Java

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

  •  
  •   xiaoyanbot · Oct 6, 2017 · 18903 views
    This topic created in 3164 days ago, the information mentioned may be changed or developed.

    阿里的 Java 手册里写着:

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

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

    5 replies    2017-10-08 11:32:51 +08:00
    depress
        1
    depress  
       Oct 6, 2017
    就是 BigDecimal
    SoulSleep
        2
    SoulSleep  
       Oct 6, 2017
    是。目测这是阿里的 Java 规范啊...

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

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

    别的数据库 /语言,也许有(或者说一般都有)专门的类库或方式处理浮点数精度的问题,但它真不一定叫 decimal。
    loveCoding
        4
    loveCoding  
       Oct 7, 2017
    阿里这份手册如果没有经验看了是没用的
    abcbuzhiming
        5
    abcbuzhiming  
       Oct 8, 2017
    java 有 float,double,BigDecimal 三种,前两者会损失精度,最后一个是专门用于高精度计算的大数类型,但是会损失性能。如果用于金融场合且小数位并不多的时候,可以考虑 BigDecimal,但是如果小数位较多,建议整体变成 BigInt
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1077 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:28 · PVG 07:28 · LAX 16:28 · JFK 19:28
    ♥ Do have faith in what you're doing.