【问题标题】:Format BigDecimal or Number without Decimal Separator格式化 BigDecimal 或不带小数分隔符的数字
【发布时间】:2015-02-25 15:50:24
【问题描述】:

您好,我想打印一个带小数但不使用小数分隔符的数字。

例如:我有这个 275.1234 但我想要这个 027512(4 位 2 十进制,全部没有分隔符)

我尝试了两种方法:

    DecimalFormat format = new DecimalFormat("0000.00");  
    DecimalFormatSymbols custom=new DecimalFormatSymbols();
    custom.setDecimalSeparator('\u0000');
    format.setDecimalFormatSymbols(custom);
    System.out.println(format.format(new BigDecimal("275.1234")));

这个打印我:0275 12(我知道我可以删除空格)

第二种方法:

    String[] value = new BigDecimal("275.1234").toString().split("\\.");
    System.out.println(value[0] + value[1].substring(0,2));

这打印我:27512(如果有问题的数字没有整数 4 位,我需要前 4 位用 0 填充)

Ex: 1,1234 ==> 000112
Ex: 10,5678 ==> 001056
Ex: 100,7877 ==> 010078

基本上我想要更优雅地解决这个问题,有什么想法吗?

谢谢 伊格纳西奥

【问题讨论】:

    标签: java format bigdecimal


    【解决方案1】:

    乘以 100 怎么样。

    String text = String.format("%06.0f", Double.parseDouble("275.1234")*100);
    

    或

    String text = String.format("%06.0f", 275.1234 * 100);
    

    或

    String text = String.format("%06.0f", BigDecimal.valueOf(275.1234).doubleValue() * 100);
    

    将text 设置为

    027512
    

    如果你想截断而不是四舍五入,你可以这样做

    String text = String.format("%06d", (long) (1234.5678 * 100));
    

    打印

    123456
    

    【讨论】:

    • @IgnacioAyuste 我现在已经修好了。它需要"%06.0f"
    • 现在工作正常。也使用 BigDecimal String text = String.format("%06.0f", new BigDecimal("275.1234").multiply(new BigDecimal(100)));
    • 我认为这是一个糟糕的解决方案,因为我丢失了确切的小数,请参阅前 String.format("%06.0f", new BigDecimal("1234.5678").multiply(new BigDecimal(100) )) 当正确的是 123456 时,这给我 123457
    • @IgnacioAyuste 不知道为什么要截断而不是舍入,但如果你愿意,你也可以这样做。
    • String.format("%06d", (long) (1234.5678 * 100));这工作正常,我想截断,因为是发票,客户想这样做,谢谢你的帮助。
    【解决方案2】:

    你也可以这样做

    String value = "275.1234".replaceAll("\\.", "").substring(0, 5) ;
    

    【讨论】:

    • 您要小心这种方法,小数点分隔符可能因语言环境而异,或者被明确设置(尽管这并不常见)。您可以使用your_formatter.getDecimalFormatSymbols().getDecimalSeparator() 获取当前的
    • 这个解决方案很糟糕,因为如果有问题的数字没有 4 位,我需要前 4 位用 0 填充,在这种情况下我需要 027512,你回答给我 27512。跨度>
    • @IgnacioAyuste 我故意这样保留它,因为如果你愿意,你可以随时在它后面附加一个零。例如 "0" + "275.1234".replaceAll("\\.", "").substring(0, 5) 或做 String.format("%0d", "275.1234".replaceAll("\\." , "").substring(0, 5))。我的解决方案只是展示一种相对简单的方法来删除十进制数字中的点(。)。
    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 2014-01-13
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多