以科学计数法格式化双重价值
我有一个223.45654543434
双号码,我需要显示它像0.223x10e+2
。
我怎样才能在Java中做到这一点?
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
从科学记数法显示数字 。 ( 复制/粘贴,因为页面似乎有问题 )
您可以使用java.text
包以科学记数法显示数字。 具体来说, java.text
包中的DecimalFormat
类可以用于此目的。
以下示例显示如何执行此操作:
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 } }
这个答案将为那些正在search“java科学记数法”的4万人节省时间。
Y的意思是%X.YE
是什么意思?
之间的数字.
E
是小数位数(不是有效数字)。
System.out.println(String.format("%.3E",223.45654543434)); // "2.235E+02" // rounded to 3 decimal places, 4 total significant figures
String.format
方法要求您指定四舍五入的小数位数。 如果您需要保留原始号码的确切含义,那么您将需要一个不同的解决scheme。
X是什么意思在%X.YE
?
%
和之间的数字.
是string将占用的最小字符数。 (这个数字是没有必要的,如上图所示,string会自动填充,如果你离开它)
System.out.println(String.format("%3.3E",223.45654543434)); // "2.235E+02" <---- 9 total characters System.out.println(String.format("%9.3E",223.45654543434)); // "2.235E+02" <---- 9 total characters System.out.println(String.format("%12.3E",223.45654543434)); // " 2.235E+02" <---- 12 total characters, 3 spaces System.out.println(String.format("%12.8E",223.45654543434)); // "2.23456545E+02" <---- 14 total characters System.out.println(String.format("%16.8E",223.45654543434)); // " 2.23456545E+02" <---- 16 total characters, 2 spaces
这是一个线程安全的实现:
private static final AtomicReference<NumberFormat> decimalFormatter = new AtomicReference<>(); private static final int PRECISION = 9; static { decimalFormatter.set(new DecimalFormat("0.0E0")); decimalFormatter.get().setRoundingMode(RoundingMode.HALF_UP); decimalFormatter.get().setMinimumFractionDigits(PRECISION); } public static String format(final BigInteger integer) { if (null == integer) return null; // could throw NullPointerException here, up to you String output = decimalFormatter.get().format(integer).toLowerCase(); final String sign = output.indexOf('-') >= 0 ? "-" : "+"; if (output.substring(output.indexOf('e')+1).length() < 2) output = output.replace("e", "e" + sign + "0"); else output = output.replace("e", "e" + sign); return output; }
最后我手工做:
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; }