У мене є ще одне рішення, що стосується toPlainString () BigDecimal, але цього разу використовуючи конструктор String, який рекомендується в javadoc:
цей конструктор сумісний зі значеннями, поверненими Float.toString та Double.toString. Це, як правило, кращий спосіб перетворення float або double в BigDecimal, оскільки він не страждає від непередбачуваності конструктора BigDecimal (подвійний).
Це виглядає так у найкоротшому вигляді:
return new BigDecimal(myDouble.toString()).stripTrailingZeros().toPlainString();
Перед Java 8 це призводить до "0,0" для будь-яких парних нульових значень, тому вам потрібно буде додати:
if (myDouble.doubleValue() == 0)
return "0";
Значення NaN та нескінченності необхідно додатково перевіряти.
Кінцевий результат усіх цих міркувань:
public static String doubleToString(Double d) {
if (d == null)
return null;
if (d.isNaN() || d.isInfinite())
return d.toString();
// Pre Java 8, a value of 0 would yield "0.0" below
if (d.doubleValue() == 0)
return "0";
return new BigDecimal(d.toString()).stripTrailingZeros().toPlainString();
}
Це також можна скопіювати / вставити, щоб добре працювати з Float.
dexp: 12345681.000000
що це неправильне значення. Насправді після цього я хочу відобразити його на своїй веб-сторінці, де вона відображається так.1.2345678E7
Чи є в будь-якому випадку, через яку я можу зберігати його в будь-якому подвійному вигляді12345678
і будь-яким іншим способом?