代码之家  ›  专栏  ›  技术社区  ›  Maksim Dmitriev

如何从以微单元表示的给定金额中提取单元和子单元部分?

  •  2
  • Maksim Dmitriev  · 技术社区  · 7 年前

    我在用Java做这个项目,有一个微型单位的价格。

    我需要提取7和99作为单独的字符串。阅读了一些关于舍入错误的帖子后,我认为实现我所需要的正确方法是将给定的量转换为字符串,并使用以下正则表达式提取单元和子单元部分:

    ^(\d+)(\d{2})0000$
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   Bernhard    7 年前

    您可以将其细化为:

    ^(\d+)(\d{2})0{4}$
    

    7.99在那里是799。 没有舍入误差。

        2
  •  1
  •   anubhava    7 年前

    BigDecimal 基于以下逻辑:

    void extractParts(String str) {
        BigDecimal bd = new BigDecimal(str);        
        BigDecimal res = bd.scaleByPowerOfTen(-6);
        BigDecimal rem = res.remainder(BigDecimal.ONE).stripTrailingZeros();
    
        System.out.printf("<%s> <%s>%n", res.longValue(), 
              rem.movePointRight(rem.scale()).abs().longValue());
    }
    

    extractParts("7990000");
    //=> <7> <99>
    
    extractParts("-1835000");
    //=> <-1> <835>
    
    extractParts("89000000");
    //=> <89> <0>