Форматирование Double в строке без научной нотации

#java #string #formatting #double #bigdecimal

#java #строка #Форматирование #double #bigdecimal

Вопрос:

У меня есть double. double foo = 123456789.1234; . Я хочу превратиться foo в строку. String str = foo ""; . Но теперь foo равно «1.234567891234E8». Есть ли способ, которым я могу превратиться foo в строку без научной нотации? Я пробовал

 String str = String.format("%.0f", foo);
  

Но это просто удаляет десятичные дроби. Он устанавливает str значение «123456789»;
Я пробовал

 String str = (new BigDecimal(foo)) "";
  

Но это теряет точность. Его значение str равно «123456789.1234000027179718017578125»;

Комментарии:

1. К вашему сведению, этот BigDecimal подход не теряет точности — он точно описывает фактическое значение, хранящееся в нем double .

Ответ №1:

Используйте просто %f вместо %.0f .

 import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        double foo = 123456789.1234;
        String str = String.format("%f", foo);
        System.out.println(str);

        // If you want to get rid of the trailing zeros
        str = new BigDecimal(str).stripTrailingZeros().toString();
        System.out.println(str);
    }
}
  

Вывод:

 123456789.123400
123456789.1234
  

Комментарии:

1. Для удаления завершающих нулей. Является ли использование большого десятичного числа снижением производительности, о котором я должен беспокоиться?

2. Нет … не то, чтобы я знал of…it существует со времен Java-5 (и сегодня у нас есть Java-15), и я никогда не слышал / не читал о том, что это вызывает какое-либо падение производительности … однако вы всегда можете провести сравнительный анализ в случае каких-либо сомнений.