#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), и я никогда не слышал / не читал о том, что это вызывает какое-либо падение производительности … однако вы всегда можете провести сравнительный анализ в случае каких-либо сомнений.