用科学计数法格式化双值

时间:2010-05-31 16:37:07

标签: java formatting scientific-notation

我有一个像223.45654543434这样的双号,我需要像0.223x10e+2一样显示它。

我怎样才能用Java做到这一点?

4 个答案:

答案 0 :(得分:29)

    System.out.println(String.format("%6.3e",223.45654543434));

结果

    2.235e+02

这是我最接近的。

更多信息:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax

答案 1 :(得分:22)

来自Display numbers in scientific notation。 (复制/粘贴,因为页面似乎有问题


您可以使用java.text包以科学记数法显示数字。具体而言,DecimalFormat包中的java.text类可用于此目的。

以下示例说明了如何执行此操作:

import java.text.*;
import java.math.*;

public class TestScientific {

  public static void main(String args[]) {
     new TestScientific().doit();
  }

  public void doit() {
     NumberFormat formatter = new DecimalFormat();

     int maxinteger = Integer.MAX_VALUE;
     System.out.println(maxinteger);    // 2147483647

     formatter = new DecimalFormat("0.######E0");
     System.out.println(formatter.format(maxinteger)); // 2,147484E9

     formatter = new DecimalFormat("0.#####E0");
     System.out.println(formatter.format(maxinteger)); // 2.14748E9


     int mininteger = Integer.MIN_VALUE;
     System.out.println(mininteger);    // -2147483648

     formatter = new DecimalFormat("0.######E0");
     System.out.println(formatter.format(mininteger)); // -2.147484E9

     formatter = new DecimalFormat("0.#####E0");
     System.out.println(formatter.format(mininteger)); // -2.14748E9

     double d = 0.12345;
     formatter = new DecimalFormat("0.#####E0");
     System.out.println(formatter.format(d)); // 1.2345E-1

     formatter = new DecimalFormat("000000E0");
     System.out.println(formatter.format(d)); // 12345E-6
  }
}  

答案 2 :(得分:15)

这个答案将为4万多人使用Google搜索" java科学记数法节省时间。"

Y在main()中的含义是什么?

%X.YE.之间的数字是小数位数(不是有效数字)。

E

System.out.println(String.format("%.3E",223.45654543434)); // "2.235E+02" // rounded to 3 decimal places, 4 total significant figures 方法要求您指定要舍入的小数位数。如果您需要保留原始数字的确切重要性,那么您将需要一个不同的解决方案。

X在String.format中的含义是什么?

%X.YE%之间的数字是字符串占用的最小字符数。(此数字不是必需的,如字符串上方所示如果你把它遗漏,它会自动填写)

.

答案 3 :(得分:-5)

最后我手工完成:

public static String parseToCientificNotation(double value) {
        int cont = 0;
        java.text.DecimalFormat DECIMAL_FORMATER = new java.text.DecimalFormat("0.##");
        while (((int) value) != 0) {
            value /= 10;
            cont++;
        }
        return DECIMAL_FORMATER.format(value).replace(",", ".") + " x10^ -" + cont;
}