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
添加回答
举报