在Java中没有E notaion的情况下打印双倍(>大于17位)值

时间:2015-07-27 11:34:21

标签: java

我需要打印22位数字,但是当我打印它时,JVM正在使用E表示法。 我尝试过BigDecimal类,printf(),String.Format(),但是我没有成功。 所有我得到的都是准确的,直到17位,从第18位数据被操纵。 例如:

原始号码:2333333333333333333333 输出:2333333333333333456252

这是我的代码片段。希望这有帮助

double[] n = new double[T];
for(int i=0;i<T;i++){
        n[i] = Double.parseDouble(scn.next());
    }
if(........){
System.out.println(new BigDecimal(n[i]).toPlainString());
System.out.printf("%.0f ", n[i]);
}

2 个答案:

答案 0 :(得分:1)

你将double传递给BigDecimal的构造函数会导致精度丢失。只需使用

System.out.println(new BigDecimal(scn.next()).toPlainString());

答案 1 :(得分:0)

这对我来说很好。

   final int NUM_BITS = 72; // 10^22 ~= 2^72

   final BigInteger bigNumber = new BigInteger(NUM_BITS, new Random());
   System.out.println("" + bigNumber);