4 回答

TA貢獻1851條經驗 獲得超4個贊
您遇到的行為是由于指定整數類型的精度而導致的,該精度無效。
此行為在類 Javadoc 中指定Formatter
:
精確
對于一般參數類型,精度是要寫入輸出的最大字符數。
對于浮點轉換“a”、“A”、“e”、“E”和“f”,精度是小數點后的位數。如果轉換為“g”或“G”,則精度是四舍五入后結果大小的總位數。
對于字符、整數和日期/時間參數類型以及百分比和行分隔符轉換,精度不適用;如果提供了精度,則會拋出異常。

TA貢獻1853條經驗 獲得超9個贊
不建議這樣做,但您可以采用這樣的方法。
public static void main(String[] args) {
long n = 16L;
// Do use format number accordingly
int format = 20;
System.out.printf(
"%" + format + "s\t" +
"%" + format + "s\t" +
"%" + format + "s\t" +
"%" + format + "s\t"+
"%" + format + "s\t" +
"%" + format + "s\n", "log(n)", "(n)", "nlog(n)", "n^2", "n^3", "2^n");
//System.out.println("log(n) \tn \t\tn*log(n)\t\tn^2 \tn^3 \t\t2^n");
while (n <= 2048) {
long l = (long) Math.log(n);
long nl = (long) (n * Math.log(n));
long pow = (long) Math.pow(n, 2);
long cube = (long) Math.pow(n, 3);
long pow2 = (long) Math.pow(2, n);
System.out.printf(
"%" + format + "d\t" +
"%" + format + "d\t" +
"%" + format + "d\t" +
"%" + format + "d\t"+
"%" + format + "d\t" +
"%" + format + "d\n", l, n, nl, pow, cube, pow2);
n = n * 2;
}
}

TA貢獻1871條經驗 獲得超13個贊
您收到的錯誤是因為您將 long 值格式化為 int 值,而 int 不支持精度格式化。嘗試將長值轉換為浮點數,并將格式說明符(%.2d 和類似的)更改為浮點說明符(%.2f 和類似的)。

TA貢獻1856條經驗 獲得超11個贊
您可以使用 DecimalFormat:
public static void main(String[] args) {
long n = 16L;
System.out.println("log(n) \tn \t\tn*log(n)\t\tn^2 \tn^3 \t\t2^n");
while(n <= 2048) {
long l = (long) Math.log(n);
long nl = (long) (n*Math.log(n));
long pow = (long) Math.pow(n,2);
long cube = (long) Math.pow(n,3);
long pow2 =(long) Math.pow(2,n);
DecimalFormat df = new DecimalFormat("0.00");
String format = df.format(l) + "\t" + df.format((nl)) + "\t" + df.format(pow) + "\t" + df.format(cube) + "\t" + df.format(pow2);
System.out.println(format);
n = n*2;
}
}
您可以在此處了解有關 DecimalFormat 的更多信息:
https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
添加回答
舉報