【问题标题】:Java integer part paddingJava整数部分填充
【发布时间】:2012-07-08 14:24:13
【问题描述】:

对不起,我最初想在 php PHP integer part padding 中执行此操作,但后来意识到我将在 Java 的另一部分代码中执行此操作

所以我需要用至少 2 个字符的整数部分来格式化数字

2.11 -> 02.11
22.11 -> 22.11
222.11 -> 222.11
2.1111121 -> 02.1111121

double x=2.11; 
System.out.println(String.format("%08.5f", x));

可以,但是右边的尾随零很烦人,我想要一个任意大的浮动部分

String.format("%02d%s", (int) x, String.valueOf(x-(int) x).substring(1))

完全丑陋且不精确(给出 02.1099...)

new DecimalFormat("00.#############").format(x)

将截断浮动部分

感谢任何更好的解决方案

【问题讨论】:

  • 将其更改为String.format("%8.5f", x)(8 之前没有 0)。
  • 我需要用 0 填充整数部分,以便整数部分至少有 2 个字符
  • 然后改成String.format("%02.5f", x),如果整数部分多于2位,则打印整数部分。
  • 它给出 2.11000,我需要 02.11
  • 您知道小数部分需要多少位数字吗?因为您可以毫无问题地使用String.format("%02f", x)。我想你应该举更多关于你需要/想要什么的例子。您甚至可以使用NumberFormat 对象为您完成这项工作(但这需要更多代码行)

标签: java numbers format pad


【解决方案1】:

我能做到的最好的就是

public static String pad(String s){
    String[] p = s.split("\\.");
    if (2 == p.length){
        return String.format("%02d.%s", Integer.parseInt(p[0]), p[1]);
    }
    return String.format("%02d", Integer.parseInt(p[0]));
}

pad(String.valueOf(1.11111118)) -> 01.11111118

【讨论】:

    【解决方案2】:

    这是一个使用 DecimalFormat 的单行:

    new DecimalFormat("00." + (x + "").replaceAll(".", "#")).format(x)
    

    它将您的小数格式化为 00.#############...,其中 "#############..." 的长度来自从你的小数的长度(“#”s 超出什么都不做)。

    如果您愿意,可以使用String.valueOf(x) 代替(x + "")

    【讨论】:

    • 我不想截断,以免失去准确性
    • 不错,比如 new DecimalFormat("00." + StringUtils.repeat("#", (x+"").length())).format(x)
    • "#'s 过多什么都不做":试试这个:float f = (float) 22.2222; System.out.println(new DecimalFormat("00." + (""+f).replaceAll(".", "#")).format(f));
    • # 不是原因。你知道,双精度和浮点数在所有编程语言中都是有限的。甚至,该限制会根据您使用该值的位置和方式而有所不同。请参阅 this related question,由 Stack Overflow 的 #1 Jon Skeet 回答,以及他的 famous talk 关于许多类似的情况。
    猜你喜欢
    • 2012-07-08
    • 2015-09-24
    • 2021-12-16
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多