dzmcs
V2EX  ›  问与答

支付相关存储金额的数据库字段,用整型还是 Decimal?

  •  1
     
  •   dzmcs · Sep 27, 2019 · 9532 views
    This topic created in 2594 days ago, the information mentioned may be changed or developed.

    支付相关存储金额的数据库字段,用整型还是 Decimal?

    整型要转为分,能不能用 Decimal 呢?

    Decimal 会不会最后帐配不平?

    21 replies  •  2019-09-27 18:30:50 +08:00
    jackyin
    jackyin
    Sep 27, 2019❤️1
    1
    金额用整型存储分比较好,显示金额转化为元即可,传输、存储最好都用整型分。
    U7Q5tLAex2FI0o0g
    U7Q5tLAex2FI0o0g
    Sep 27, 2019
    2
    肯定用整型,没的讨论的,结贴
    b821025551b
    b821025551b
    Sep 27, 2019
    3
    别用 Decimal,decimal 读到业务层还是 float,各种分账转换后还是出问题;金额永远是 int,业务层最后展示再转成元。
    l00t
    l00t
    Sep 27, 2019
    4
    什么数据库?整型是多长?

    这俩本身没有什么实质差别。用 Decimal 更方便一些。
    dzmcs
    dzmcs
    OP
    Sep 27, 2019
    5
    @l00t
    postgresql,现在很多语言也有 Decimal 类型,但是都说用整型,了解一下有没有用 Decimal 类型的
    kidtest
    kidtest
    Sep 27, 2019
    6
    一般精确到分足够用了吧,直接乘以 100 存整形
    gfreezy
    gfreezy
    Sep 27, 2019
    7
    用户端精确到分够了,但是涉及到分佣,1 分钱乘个 3% 啥的,怎么也得小数点后 5 6 位。除非合同规则里面写明精确到分,四舍五入。
    gfreezy
    gfreezy
    Sep 27, 2019
    8
    我们系统直接用了 Decimal,但是这样要求所有地方的代码也得都用 Decimal
    wysnylc
    wysnylc
    Sep 27, 2019
    9
    用 Decimal,代码也用 Decimal 就行
    用整型拆分的多此一举,没 Decimal 的时候没办法,有 Decimal 还这么做就跟不上时代了
    passerbytiny
    passerbytiny
    Sep 27, 2019
    10
    只要不用浮点,都行。

    当然,在没有最终性能优化需要的情况下,数据库请尽量用可读性好的数据,带少量小数位的数值就用 Decimal/Number/Numeric 类型,日期时间就用 Date/DateTime 类型。不过如果你对应的编程语言没有十进制对应的类型,那么就像前 3 楼那样用替代类型(金额放大成整数,时间用时间戳,日期用整数)好了。

    一般来说,金额是必定用十进制类型的,除了不用转换外,在精度控制和四舍五入上也很方便。
    l00t
    l00t
    Sep 27, 2019
    11
    @dzmcs #5 那至少得 bigint 了。单 int 是不够用的。也可以考虑用 decimal 或者 numeric,这俩本身也是同一回事。帐配不平的事情是不存在的,不用多虑。帐要是不平,肯定是你们程序自己出了问题,而不是 decimal 的数据类型问题。
    randyo
    randyo
    Sep 27, 2019 via Android
    12
    记得 c#有 decimal 类型。以前用 double 老是算错,换了 decimal 就没问题了。
    Raymon111111
    Raymon111111
    Sep 27, 2019
    13
    整型处理简单不容易出错

    帐不平那是程序逻辑的问题吧, 这里多了一分肯定是另外一个地方要扣一分啊
    bk201
    bk201
    Sep 27, 2019
    14
    那问题来了,日期你们用整型还是 datetime
    efaun
    efaun
    Sep 27, 2019
    15
    整型,存分
    IMCA1024
    IMCA1024
    Sep 27, 2019
    16
    财务系统,用的 decimal。 存储多几位而已
    IMCA1024
    IMCA1024
    Sep 27, 2019
    17
    @IMCA1024 小数点后,多存几位
    rockyou12
    rockyou12
    Sep 27, 2019
    18
    我们的系统数据库钱和库存都是用 decimal,代码里是 java,用 bigdecimal
    ytmsdy
    ytmsdy
    Sep 27, 2019
    19
    金额强烈建议用 int,之前有个项目觉得用 decimal 好像也没问题,但是实际当金额进行折扣计算,还是会出现四舍五入的问题。单单为了这个增加了不知道多少的工作量
    qdyoungk
    qdyoungk
    Sep 27, 2019
    20
    科蓝用 Decimal
    gIrl1990
    gIrl1990
    Sep 27, 2019
    21
    @ytmsdy java 吗?要选对方法吧,不然丢精度。下面两个是正确的
    BigDecimal.valueOf(double) 不信试试 new BigDecimal(0.1D)
    new BigDecimal(float.toString()); 不信试试 new BigDecimal(0.1F) 或者 BigDecimal.valueOf(0.1F)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3371 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 10:36 · PVG 18:36 · LAX 02:36 · JFK 05:36
    ♥ Do have faith in what you're doing.