java - 指数精度[打印 double ]

标签 java precision exponential

有没有一种以指数精度打印的方法? 我需要用微小的数字填充一些数据并在之后进行比较......

我有这样的:

(0) - Mesured estimatedTime for multithread in block: 1.4917951E16 s
(1) - Mesured estimatedTime for multithread in block: 7.531891E15 s
(2) - Mesured estimatedTime for multithread in block: 2.9287E13 s
(3) - Mesured estimatedTime for multithread in block: 3.28478435E17 s
(4) - Mesured estimatedTime for multithread in block: 6.038E12 s

我想像这样打印:

(0) - Mesured estimatedTime for original in block: 0000.15595175E15 s           
(1) - Mesured estimatedTime for original in block: 0007.335638E15 s             
(2) - Mesured estimatedTime for original in block: 0416.66E15 s                 
(3) - Mesured estimatedTime for original in block: 0000.0390156852E15 s         
(4) - Mesured estimatedTime for original in block: 6642.0E15 s

我知道你可以像这样强制它:

// Force minimum number of digits to left and right of decimal point
formatter = new DecimalFormat("0.0E0");
s = formatter.format(-1234.567);         // -1.2E3

但不知道如何强制它达到 Expo-Precision :(((( 帮助!! :/

最佳答案

您似乎想要暗示精度为 1e15。

for (double d : new double[]{1.4917951E16, 7.531891E15, 2.9287E13, 3.28478435E17, 6.038E12})
    System.out.printf("%11fE15%n", d/1e15);

打印

  14.917951E15
   7.531891E15
   0.029287E15
 328.478435E15
   0.006038E15

如果范围更宽,您可以使用 DecimalFormat

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(300);
df.setGroupingUsed(false);
for(double d = 1 ; d <= 1e30; d *= 1e5) {
    System.out.println(df.format(d/1e15)+"E15");
}

打印

0.000000000000001E15
0.0000000001E15
0.00001E15
1E15
100000E15
10000000000E15

关于java - 指数精度[打印 double ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199815/

相关文章:

java - java程序中的错误

c - C 中的 float 与预期略有不同

matlab - 为什么 MATLAB surf 函数不能处理单精度数据?

c - 理解从整数到 float 的转换

algorithm - 实数的幂运算

r - R 中非线性关系的外推 (ggplot2)

java - 在java中将KB转换为MB

java - 无法使用注释和 xml 在 Spring 中注入(inject) Beans

java - 内部依赖类限定名称冲突

java - 需要算法来用 Java 在我的游戏板上设置棋子