Научна нотация до десетична дроб

Имам двойно число и се опитвам да го конвертирам в десетичен знак. Когато използвам decimalformat, за да постигна това, получавам следното:

public void roundNumber(){
    double d = 2.081641999208976E-4;
    JOptionPane.showMessageDialog(null,roundFiveDecimals(d));
}

public double roundFiveDecimals(double d) {
    DecimalFormat df = new DecimalFormat("#.#####");
    return Double.valueOf(df.format(d));
}

Искам изходът да бъде .00021; обаче получавам 2.1E-4. Може ли някой да помогне да обясни как да получа .00021, а не 2.1E-4?


person Michael Rentmeister    schedule 29.07.2011    source източник


Отговори (1)


Вие анализирате резултата от DecimalFormat - трябва да го връщате като String:

public String roundFiveDecimals(double d) {
    DecimalFormat df = new DecimalFormat("#.#####");
    return df.format(d);
}

Самата стойност double няма концепция за форматиране - това е просто число. Работа на DecimalFormat е да форматира стойността в текст, както искате... ако след това преобразувате този текст обратно в число, вие сте загубили тази работа.

person Jon Skeet    schedule 29.07.2011