printf как делать с плавающей запятой с ведущими нулями

Я знаю, как сделать X количество начальных нулей, и я знаю, как сделать X количество десятичных знаков. Но как мне сделать их обоих?

Я хочу иметь 4 начальных нуля с десятичной точностью 2: 0000,00. Следовательно, 43,4 будет 0043,40.


person ParoX    schedule 09.07.2010    source источник
comment
Пожалуйста, не отмечайте printf-вопрос C++.   -  person Björn Pollex    schedule 09.07.2010
comment
@Space_C0wb0y: Нет ничего плохого в использовании printf в C++. В идеальном мире все бы использовали iostreams в своем C++, но мы живем не в идеальном мире. Кроме того, иногда легче отформатировать строку так, как нужно, с помощью printf.   -  person George    schedule 09.07.2010
comment
На мой взгляд, использование printf в C++ действительно очень неправильно. C и C++ — это два совершенно разных языка, и люди делают разные предположения о том, какие функции C подходят для C++, а какие — нет. Различные предположения всегда приводят к неприятностям.   -  person Björn Pollex    schedule 09.07.2010
comment
этот C и C++ - совершенно разные языковые вещи, которые будут повторяться слишком много... Вопрос: может ли C++ вызвать обычную библиотеку? (где нормально, я имею в виду, вероятно, тонны классных библиотек C, доступных там...) Ответ: да. Итак, почему C++ должен быть закрыт для вызова только библиотек, созданных с помощью C++? Если ответ таков: С++ должен иметь возможность вызывать простые библиотеки C (скажем: png lib, gsl lib,...) 4когда бы то ни было, не требуя его надлежащих привязок (со всеми их накладными расходами), то почему С++ не должен быть в состоянии вызывать func в стандартной C lib, как и любую другую библиотеку func без конкретных привязок C++?   -  person ShinTakezou    schedule 09.07.2010
comment
Какие функции C подходят для C++, а какие нет, почти полностью зависит от вашего мнения. Вам не нравится printf? Отлично. Но говорить людям, что они никогда не должны использовать его только потому, что он находится в стандартной библиотеке C или потому, что он вам не нравится, глупо.   -  person George    schedule 09.07.2010
comment
О, какая ирония... Разные люди делают разные предположения о том, какие функции C подходят для C++, и разные предположения приводят к проблемам. Поэтому всем следует просто принять мои (очевидно превосходящие) предположения.   -  person Dave Sherohman    schedule 10.07.2010


Ответы (3)


Попробуйте это printf (C, Perl, PHP): строка формата:

"%07.2f"
person Marcelo Cantos    schedule 09.07.2010
comment
у java тоже есть printf... (System.out.printf() ) - person st0le; 11.07.2010
comment
@st0le: Python тоже (через оператор %), но я не вносил список языков. Не стесняйтесь редактировать ответ. - person Marcelo Cantos; 12.07.2010
comment
Стоит отметить, что первая цифра (7) означает общую длину, которая включает в себя целую часть, дробную часть и саму точку FP (а также необязательный знак минус). - person Konstantin; 14.02.2016

Вот код, который вам нужен:

float myNumber = 43.4;
DecimalFormat formatter = new DecimalFormat("0000.00"); //use # for optional digits instead of 0
System.out.println(formatter.format(myNumber));
person Mustafa Zengin    schedule 09.07.2010
comment
Кстати, сейчас я программировал на некоторых других языках программирования. Таким образом, я забыл написать имя переменной my_number в знаменитом соглашении по программированию на Java: CamelCase. Согласно соглашению, это должен быть myNumber. ;) - person Mustafa Zengin; 09.07.2010
comment
Вместо того, чтобы комментировать объяснение «my_number» и «myNumber», отредактируйте свой ответ. - person GreenMatt; 09.07.2010
comment
Я не думаю, что у него еще достаточно представителей, чтобы редактировать свои ответы. Но я делаю. - person Dave Sherohman; 10.07.2010

Java: используйте класс Formatter. . Примеры ожидаемого использования:

StringBuilder sb = new StringBuilder();
// Send all output to the Appendable object sb
Formatter formatter = new Formatter(sb, Locale.US);

// Explicit argument indices may be used to re-order output.
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
// -> " d  c  b  a"

// Optional locale as the first argument can be used to get
// locale-specific formatting of numbers.  The precision and width can be
// given to round and align the value.
formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);
// -> "e =    +2,7183"

// The '(' numeric flag may be used to format negative numbers with
// parentheses rather than a minus sign.  Group separators are
// automatically inserted.
formatter.format("Amount gained or lost since last statement: $ %(,.2f",
                balanceDelta);
// -> "Amount gained or lost since last statement: $ (6,217.58)"
person Leni Kirilov    schedule 09.07.2010