我需要打印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]);
}
答案 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);