2015-09-22 5 views
4

У меня есть некоторые двойные номера, которые выведенные с этим форматом:Java выход двойных чисел в экспоненциальном формате

Format.String("%1.4e",doubleNumber); 

Результатом является 1.123456e+03. Как я могу установить количество шифра показателя для получения этого формата:

1.123456e+003 

Я всегда 3 Шифр ​​после e символа. Спасибо


UPDATE 1:

я частично решена:

DecimalFormat formatter = new DecimalFormat("0.000000E000"); 

System.out.println (formatter.format (doubleNumber));

В настоящее время число всегда имеет формат

1.123456e0xx 

или

1.123456e-0xx 

Но это еще не все решены. Я бы всегда печатал знак:

Как я могу это сделать? http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html

+1

Check tihs - HTTP: // StackOverflow.com/questions/3424792/java-decimalformat-create-error-when-enforcing-exponent-sign – TDG

+0

спасибо @TDG, я использовал это решение – michele

ответ

0

Нет никакого встроенного способа сделать это, вам придется сделать это самостоятельно.

Проще всего было бы отформатировать, как вы, а затем добавить дополнительные нули, если необходимо.


Кроме того, это String.format, не Format.String, а формат "%1.4e" вы дали приведет 1.1235e+03, не 1.123456e+03.

0

В String или Formatter ничего не видно. JavaDoc, который позволяет вам делать это напрямую. Поэтому я думаю, вам придется прибегнуть к некоторому сплетению.

long exponentMask = 0x7ff0000000000000L; // per JavaDoc for Double 
// the exponent is in bits 62-52, so I'm thinking a right-shift by 52 
// bits would work. But I could be off by one. 
int shiftExponentBy = 52; 
long myDoubleAsLong = Double.doubleToLongBits(doubleNumber); 
long rawExponent = myDoubleAsLong & exponentMask; 
long shiftedExponent = rawExponent >> shiftExponentBy; 

Это дает вам экспоненту самостоятельно. Вы должны иметь возможность извлекать значение подобным образом, а затем форматировать каждый отдельно.

Update 1

Кажется, что ваш Update 1 приводит к той же проблеме, просто выражается по-разному. Вам нужно отформатировать экспонента отдельно от значения. DecimalFormat допускает положительный паттерн и другой отрицательный шаблон, но для положительных и отрицательных значений. Вам понадобится вариант для тех, которые допускают положительные и отрицательные показатели. Я такого не вижу. Я стою от своего первоначального ответа.

0

Спасибо @TDG

private String formatter(double number){ 
    DecimalFormat formatter = new DecimalFormat("0.000000E000"); 
    String fnumber = formatter.format(number); 
    if (!fnumber.contains("E-")) { //don't blast a negative sign 
     fnumber = fnumber.replace("E", "E+"); 
    } 
    return fnumber; 
} 
Смежные вопросы