• 请不要在回答技术问题时复制粘贴 AI 生成的内容
vinsony
V2EX  ›  程序员

储存价格的字段,单位用元还是分好

  •  
  •   vinsony · Jun 17, 2015 · 10981 views
    This topic created in 4000 days ago, the information mentioned may be changed or developed.

    用分为单位可以用int型,比较好计算,但是一般用户输入个显示的单位都是元,需要转换比较繁琐。
    大家一般用什么作单位的?

    27 replies    2015-06-18 07:37:13 +08:00
    Septembers
        1
    Septembers  
       Jun 17, 2015 via Android
    您在做死
    neoblackcap
        2
    neoblackcap  
       Jun 17, 2015
    用精确的数据类型存储,你的数据类型若是能精确保存分数比如1/3之类的,你用什么单位都一样。

    若是不能就乖乖地用分对应整型或者长整型来保存,反正微信那边的人是这样做。
    vinsony
        3
    vinsony  
    OP
       Jun 17, 2015
    我现在用的很黄很暴力的varchar....单位是元..
    Mutoo
        4
    Mutoo  
       Jun 17, 2015
    decimal <- 正解 如果不做汇率转换,直接用元就行了。
    love
        5
    love  
       Jun 17, 2015
    javascript中的计算呢?用int? 毕竟0.1 + 0.1 + 0.1 !== 0.3有时也要命的
    bigdude
        6
    bigdude  
       Jun 17, 2015
    decimal啊
    jedrek
        7
    jedrek  
       Jun 17, 2015
    《高性能MySQL》中建议用整数类型保存,必要的时候移动小数点即可
    quix
        8
    quix  
       Jun 17, 2015
    支持ls , 用 decimal, 本质是用字符串保存的数字
    mahone3297
        9
    mahone3297  
       Jun 17, 2015
    建议整形。。。
    davidyin
        10
    davidyin  
       Jun 17, 2015
    整数,到分
    learnshare
        11
    learnshare  
       Jun 17, 2015
    用分的整数比较好
    garfeildma
        12
    garfeildma  
       Jun 17, 2015
    整数,分,用decimal才是作死
    xmbaozi
        13
    xmbaozi  
       Jun 17, 2015
    用分的话 万一哪个地方忘了转换成元岂不是悲剧
    b821025551b
        14
    b821025551b  
       Jun 17, 2015
    精确到毫,用long存储;流水大业务复杂的话用分存误差太大。
    b821025551b
        15
    b821025551b  
       Jun 17, 2015
    @xmbaozi 养成习惯就好了,前公司所有的金额字段都是精确到毫,各种计算按豪,只有最后展示或调用支付宝api才格式化成元。
    keary
        16
    keary  
       Jun 17, 2015
    看你的业务需要了,如果需要考虑以后支持不同币种的话,务必使用decimal;如果只支持人民币单一币种就直接int或者long就可以了。
    vinsony
        17
    vinsony  
    OP
       Jun 17, 2015
    @b821025551b 经常有网站超低价卖东西,可能就是忘了多按两个零.... o(∩_∩)o
    loveuqian
        18
    loveuqian  
       Jun 17, 2015
    用String最好。。。。。23333
    lilydjwg
        19
    lilydjwg  
       Jun 17, 2015
    @quix decimal,至少是正确实现的 decimal,是使用十进制数的。而且其运算 CPU 也有直接支持。

    @neoblackcap 金融很少有需要使用分数的情况吧。大部分情况都是精确到分,比如某商品三件一块钱,那么买一件就是 0.33RMB,两件就是 0.67RMB。

    @xmbaozi 除了调试的时候,你应该只有一个地方来做这种转换。

    通常表示价格的需求,定点数最好。
    arslion
        20
    arslion  
       Jun 17, 2015
    分(认真脸)
    quix
        21
    quix  
       Jun 17, 2015
    @lilydjwg 查了一下文档, mysql 5.0.3之前的版本确实是用string 储存的, 现在确实都是使用binary保存了.
    imn1
        22
    imn1  
       Jun 17, 2015
    用分是肯定不够的,除非纯粹只是显示
    别说证券、汇率用到厘的情况很多,即使一般财务做一些统计学计算,那时发现只到分是很头痛的事
    neoblackcap
        23
    neoblackcap  
       Jun 17, 2015
    @lilydjwg 这高精度的数据结构就好。因为单看int我都不知道楼主在说哪个领域,数据库还是编程语言,好比C就没有原生的decimal但有int。
    shakoon
        24
    shakoon  
       Jun 17, 2015
    银行用number(22,2)
    lujiajing1126
        25
    lujiajing1126  
       Jun 17, 2015
    我司用的都是分

    用64位的系统,Java的话货币可以用BigDecimal,c,cpp可以用long或者long long吧,sql(mysql,hive)里面BigInt

    至于JavaScript。。。。没办法。。你就用字符串吧。。
    ryd994
        26
    ryd994  
       Jun 17, 2015
    除了输出的时候/100其他时候根本不用转换
    有什么繁琐的?
    lilydjwg
        27
    lilydjwg  
       Jun 18, 2015
    @lujiajing1126 C 可以用 mpdecimal 的。Java 都有库的东西 C 和 C++ 不太可能没有。
    @quix MySQL 还真拿过字符串表示十进制数啊,这 My- 前缀再一次被表现了 :-D
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2730 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 12:53 · PVG 20:53 · LAX 05:53 · JFK 08:53
    ♥ Do have faith in what you're doing.