2010-07-09 14 views
9

Wiem, jak zrobić X ilość wiodących zer, i wiem, jak zrobić X ilość kropek dziesiętnych. Ale jak mam je wykonać?printf jak robić zmiennoprzecinkowe z zerami wiodącymi

Szukam 4 początkowych zer dokładności dziesiętnej 2: 0000.00. Dlatego 43,4 byłoby 0043,40

+1

Proszę nie oznacz 'printf'-pytanie' 'C++. –

+3

@ Space_C0wb0y: Nie ma nic złego w korzystaniu z printf w C++. W idealnym świecie każdy będzie używał iostreamów w swoim C++, ale nie żyjemy w idealnym świecie. Poza tym czasami łatwiej jest uzyskać ciąg sformatowany w taki sposób, jaki chcemy z printf. – George

+0

Moim zdaniem jest rzeczywiście bardzo źle z użyciem 'printf' w C++. C i C++ to dwa zupełnie różne języki, a ludzie przyjmują różne założenia co do tego, które funkcje C są w porządku w C++, a które nie. Różne założenia zawsze prowadzą do kłopotów. –

Odpowiedz

17

Spróbuj printf (C, Perl, PHP) ciąg formatu:

"%07.2f" 
+0

java ma także printf ... (System.out.printf()) – st0le

+0

@ st0le: Tak samo jak Python (za pośrednictwem operatora '%'), ale nie dodałem listy języków. Zapraszam do dalszej edycji odpowiedzi. –

+1

Warto wspomnieć, że pierwsza liczba (7) oznacza całkowitą długość, która obejmuje część całkowitą, część ułamkową i samą kropkę FP (oraz opcjonalny znak "minus"). – Konstantin

-1

Java: użyć klasy Formatter. Przykłady oczekiwanego zużycia:

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)" 
8

Oto kod trzeba:

float myNumber = 43.4; 
DecimalFormat formatter = new DecimalFormat("0000.00"); //use # for optional digits instead of 0 
System.out.println(formatter.format(myNumber)); 
+1

Nawiasem mówiąc, kodowałem w niektórych innych językach programowania w dzisiejszych czasach. W ten sposób zapomniałem napisać nazwę zmiennej my_number w słynnej konwencji programowania Java: CamelCase. Powinien to być mój numer zgodnie z konwencją. ;) –

+2

Zamiast komentować, aby wyjaśnić "my_number" vs. myNumber, edytuj swoją odpowiedź. – GreenMatt

+1

Nie sądzę, żeby miał wystarczająco dużo przedstawiciela, aby edytować swoje odpowiedzi. Ale robię. –

Powiązane problemy