#java #formatting #string-formatting
#java #форматирование #форматирование строки
Вопрос:
Я изучаю курс алгоритмов Принстона, и первая задача программирования требует вывода результата таким образом:
mean = 0.5929934999999997
stddev = 0.00876990421552567
95% confidence interval = [0.5912745987737567, 0.5947124012262428]
Я думал о форматировании строки, поскольку никто в здравом уме не стал бы считать количество пробелов для отступа:
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width)).concat("s = ");
System.out.printf(f.concat("%fn"), "mean", stats.mean());
System.out.printf(f.concat("%fn"), "stddev", stats.stddev());
System.out.printf(f.concat("[%f, %f]"), confidence, stats.confidenceLo(), stats.confidenceHi());
Но, к моему сожалению, программа усекает double до float:
mean = 0.591316
stddev = 0.009776
95% confidence interval = [0.589400, 0.593232]
Итак, есть ли способ отформатировать double number полностью, так сказать?
Ответ №1:
Используйте DecimalFormat для этого случая, что-то вроде:
double mean = 0.592993499999999;
NumberFormat formatter = new DecimalFormat("#0.000000000000000");
System.out.println(formatter.format(mean));
Комментарии:
1. @constantinopolskaya Этот ответ работает. Но вы должны не забыть изменить %f на %s в вашем printf, потому что программа форматирования возвращает строку.
Ответ №2:
Используйте формат с 16 знаками после запятой «%.16f»
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width)).concat("s = ");
System.out.printf(f.concat("%.16fn"), "mean", stats.mean());
System.out.printf(f.concat("%.16fn"), "stddev", stats.stddev());
System.out.printf(f.concat("[%.16f, %.16f]"), confidence, stats.confidenceLo(), stats.confidenceHi());
Ответ №3:
Я использовал String.valueOf(aDoubleNumber)
метод и изменил %f на %s в ваших инструкциях printf. У меня это сработало.
public static void main(String[] args)
{
double mean = 0.5929934999999997;
double stddev = 0.00876990421552567;
double confidenceLo = 0.12345666612123;
double confidenceHi = 0.123456784435369;
String confidence = "95% confidence interval";
int width = confidence.length();
String f = "%-".concat(String.valueOf(width))
.concat("s = ");
// changed the %f to %s and used String.valueOf method to convert first
System.out.printf(f.concat("%sn"), "mean", String.valueOf(mean));
System.out.printf(f.concat("%sn"), "stddev", String.valueOf(stddev));
System.out.printf(f.concat("[%s, %s]"), confidence,
(String.valueOf(confidenceLo)), String.valueOf(confidenceHi));
}
Вывод:
среднее значение = 0.5929934999999997
stddev = 0.00876990421552567
95% доверительный интервал = [0.12345666612123, 0.123456784435369]