Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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_Exception_Long Integer - Fatal编程技术网

我能';在Java中,是否以长数据类型打印数学类的结果?

我能';在Java中,是否以长数据类型打印数学类的结果?,java,exception,long-integer,Java,Exception,Long Integer,我正在尝试创建一个从16到2048的带有n的表,以及log(n),n*log(n) 起初,我将结果打印成双精度,结果很好,只是表格没有对齐,而是在n=256时比较混乱。我认为对于双数据类型来说,结果可能太大了,所以我选择了long public class FunctionGrowth { public static void main(String[] args) { long n = 16L; System.out.println("log(n) \

我正在尝试创建一个从16到2048的带有n的表,以及log(n),n*log(n)

起初,我将结果打印成双精度,结果很好,只是表格没有对齐,而是在n=256时比较混乱。我认为对于双数据类型来说,结果可能太大了,所以我选择了long

public class FunctionGrowth {
    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);

            System.out.printf("%.2d\t%.0d\t\t%.2d\t\t\t%d\t%d\t\t%d\n", l, n, nl, pow, cube, pow2);
            n = n*2;
        }
    }
}
公共类函数增长{
公共静态void main(字符串[]args){
长n=16L;
System.out.println(“日志(n)\tn\t\tn*log(n)\t\tn^2\tn^3\t\t2^n”);

而(n您所经历的行为是由于为整数类型指定了精度,这是无效的

此行为在
格式化程序
类Javadoc中指定:

精密度

对于常规参数类型,精度是要写入输出的最大字符数

对于浮点转换“a”、“a”、“e”、“e”和“f”,精度为小数点后的位数。如果转换为“g”或“g”,则精度为四舍五入后所得幅值的总位数

对于字符、整型、日期/时间参数类型以及百分比和行分隔符转换,精度不适用;如果提供精度,将引发异常


出现的错误是因为您正在将长值格式化为int值,而int不支持精确格式化。请尝试将长值强制转换为浮点,并将格式说明符(%.2d和类似的说明符)更改为浮点说明符(%.2f和类似的说明符)


谢谢

您可以使用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;
    }
}
publicstaticvoidmain(字符串[]args){
长n=16L;
System.out.println(“日志(n)\tn\t\tn*log(n)\t\tn^2\tn^3\t\t2^n”);

虽然(n这是不推荐的,但是你可以用这样的方法

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;
    }
}
publicstaticvoidmain(字符串[]args){
长n=16L;
//请使用相应的格式编号
int格式=20;
System.out.printf(
“%”格式+“s\t”+
“%”格式+“s\t”+
“%”格式+“s\t”+
“%”格式+“s\t”+
“%”格式+“s\t”+
“%”+格式+“s\n”、“log(n)”、“(n)”、“nlog(n)”、“n^2”、“n^3”、“2^n”);
//System.out.println(“日志(n)\tn\t\tn*log(n)\t\tn^2\tn^3\t\t2^n”);

while(据我所知,您为浮点值指定精度,而不是为long指定精度。使用
System.out.printf(“%d\t%d\t\t%d\t\t%d\t%d\t\t%d\n”,l,n,nl,pow,cube,pow2”);
谢谢您的工作,但表格仍然混乱:(首先,一个long有多少位?给定这个位数,它能容纳的最大位数是多少?(提示:要知道这一点,请在1位、2位、3位中找到你能容纳的最大位数,以此类推。)关于您的代码,您的结论是什么?第二,异常在哪里引发?请阅读其堆栈跟踪以了解情况。它与值无关。它与您尝试使用的格式有关:
%.2d