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

如何优雅解决小数显示问题?

  •  
  •   vanillaxxx · 2020-01-17 16:29:10 +08:00 · 10831 次点击
    这是一个创建于 1777 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务端返回如下数据并生成一个 product 对象,字段类型是 BigDecimal

    {
      "price1": 100,
      "price2": 99.99,
      "price3": 99.5
    }
    

    要在客户端显示出来的时候碰到下面的问题

    1.如果在 strings.xml 做如下定义

    <string name="data_price">¥%1$.2f</string>
    

    界面上三个字段会显示成 ¥100.00 ,¥99.99 ,¥99.50

    2.如果在 strings.xml 做如下定义

    <string name="data_price">¥%1$s</string>
    

    界面在 debug 下打包是预期的结果,然而在 release 下打包会变成 2 的情况

    3.使用格式化工具

    val format = DecimalFormat("0.##")
    

    这样符合预期结果,但是代码中有几百处需要修改

    想问问各位大佬,有没有更优雅的解决方案?造成 2 的原因是什么?

    9 条回复    2020-01-18 10:35:37 +08:00
    NathanDo
        1
    NathanDo  
       2020-01-17 16:30:59 +08:00
    在 Bean 的 Getter 中 format
    chendy
        2
    chendy  
       2020-01-17 16:35:19 +08:00
    让接口直接返回字符串…
    vanillaxxx
        3
    vanillaxxx  
    OP
       2020-01-17 16:45:15 +08:00
    @NathanDo
    @chendy
    这样就得更改字段类型成字符串啦,然而如果改成字符串,代码里面涉及到计算的部分又是另一个蛋疼的十二了[/捂脸]
    chendy
        4
    chendy  
       2020-01-17 16:47:41 +08:00
    @parorisim 不清楚你用的 json 库是什么,但是一般的 json 库都应该支持用字符串 序列化 /反序列化 BigDecimal 吧
    x537196
        5
    x537196  
       2020-01-17 16:49:10 +08:00
    涉及到价格的都是用的多少分=。=
    {
    "price1": 10000,
    "price2": 9999,
    "price3": 9950
    }
    vanillaxxx
        6
    vanillaxxx  
    OP
       2020-01-17 16:52:29 +08:00
    @chendy #4 可能我没描述清楚,服务端返回没什么问题,我这边反序列化成 BigDecimal 也没有问题,奇怪的就是 debug 下它显示是预期中的结果,release 就不合适了,所以我在考虑要不要去魔改 BigDecimal 的 toString 方法
    vanillaxxx
        7
    vanillaxxx  
    OP
       2020-01-17 16:53:45 +08:00
    @x537196 #5 我们当时没有用分是考虑到客户端拿过来还得除个 100 嫌麻烦,数据库里面倒是分
    execute
        8
    execute  
       2020-01-17 17:29:25 +08:00
    java.math.BigDecimal.stripTrailingZeros()
    Pythondr
        9
    Pythondr  
       2020-01-18 10:35:37 +08:00
    后段处理好返回指定位数的字符串
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3398 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:36 · PVG 19:36 · LAX 03:36 · JFK 06:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.