Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java整数部分填充_Java_Numbers_Format_Pad - Fatal编程技术网

Java整数部分填充

Java整数部分填充,java,numbers,format,pad,Java,Numbers,Format,Pad,很抱歉,我最初想用php来做,但后来意识到我会在代码的另一部分用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,

很抱歉,我最初想用php来做,但后来意识到我会在代码的另一部分用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…)

将截断浮动部分

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

thx对于任何更好的解决方案

这里有一个使用DecimalFormat的单行程序:

new DecimalFormat("00." + (x + "").replaceAll(".", "#")).format(x)
它将您的小数格式设置为00。###################################################的长度来自于


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

我能提供的最好的方法是

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.1111111 8))->01.1111111 8

将其更改为
String.format(“%8.5f”,x)
(8之前没有0)。我需要将整数部分填充为0,以便整数部分至少有2个字符,然后将其更改为
String.format(“%02.5f”,x)
,如果整数部分中的数字超过2位,它将打印整个整数部分。它给出2.11000,我需要02.11。你知道小数部分需要多少位数吗?因为您可以毫无问题地使用
String.format(“%02f”,x)
。我想你应该多举些例子说明你需要什么。你甚至可以使用一个对象来为你做这项工作(但它需要更多的代码行)我不希望截断,也不希望失去准确性很好,比如新的DecimalFormat(“00.”+StringUtils.repeat(“#)”,(x+).length())。格式(x)”#超出了什么都不做:试试这个:float f=(float)22.2222;System.out.println(新的十进制格式(“00.”+(“+f”).replaceAll(“.”,“#”)格式(f));#这不是原因。你知道,在所有编程语言中,双精度和浮点数都是有限的。即使如此,这种限制也会根据您使用该值的位置和方式而有所不同。看,Stack Overflow的#1 Jon Skeet以及他关于许多类似案例的回答。