У меня есть двойной номер, например 223.45654543434
, и мне нужно показать его как 0.223x10e+2
.
Как это сделать в Java?
У меня есть двойной номер, например 223.45654543434
, и мне нужно показать его как 0.223x10e+2
.
Как это сделать в Java?
Наконец, я делаю это вручную:
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;
}
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
. В частности, для этой цели может быть использован 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
}
}
Этот ответ позволит сэкономить время для 40k + людей, которые ищут "java научную нотацию".
Что означает 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
требуется указать число десятичных цифр для округления до. Если вам нужно сохранить точное значение исходного номера, вам понадобится другое решение.
Что означает X в %X.YE
?
Число между %
и .
- это минимальное количество символов, которое будет занимать строка. (этот номер не требуется, как показано выше, строка будет автоматически заполняться, если вы оставите его)
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;
}