2011-12-18 14 views

Odpowiedz

15

Użyj setf i precision.

#include <iostream> 

using namespace std; 

int main() { 
    double f = 3.14159; 
    cout.setf(ios::fixed,ios::floatfield); 
    cout.precision(3); 
    cout << f << endl; 
    return 0; 
} 

Drukuje 3.142

+0

Dzięki. To było dla mnie pomocne. – ozeron

+0

To działa dla wersji 3.14159, ale nie działa dla 13.14159. Twoje rozwiązanie działa tylko dla liczb mniejszych niż 10. – mantler

+0

@manler Masz rację, mój oryginalny post nie, ale ostatni (ten, który edytowałem 11 minut temu) działa poprawnie. Zweryfikowałem to za pomocą 2 i 3 cyfr przed kropką dziesiętną, i wypisuje 3 cyfry zgodnie z oczekiwaniami. – dasblinkenlight

6

Ten jeden ma pokazać „13,141”

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main(){ 
    double f = 13.14159; 
    cout << fixed; 
    cout << setprecision(3) << f << endl; 
    return 0; 
} 
4

można dostać stałą liczbę cyfr ułamkowych (i wieloma innymi) za pomocą nagłówka iomanip. Na przykład:

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 
    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    return 0; 
} 

wyjście wola:

3.14 

Należy zauważyć, że zarówno fixed i setprecision zmienić strumień na stałe tak, jeśli chcesz, aby zlokalizować efekty można zapisać informacje wcześniej i przywrócić go później :

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 

    std::cout << pi << '\n'; 

    // Save flags/precision. 
    std::ios_base::fmtflags oldflags = std::cout.flags(); 
    std::streamsize oldprecision = std::cout.precision(); 

    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    std::cout << pi << '\n'; 

    // Restore flags/precision. 
    std::cout.flags (oldflags); 
    std::cout.precision (oldprecision); 

    std::cout << pi << '\n'; 

    return 0; 
} 

wyjście to jest:

3.14159 
3.14 
3.14 
3.14159 
+0

Dzięki za pokazanie, jak zapisać i przywrócić ustawienia strumienia, bardzo pomocne. – bhaller

+0

użyj tego wiersza "using namespace std;" dla bardziej czystego kodu –

+0

@ Khaled, istnieją argumenty za i przeciw temu, które są na tyle złożone, że nie mieszczą się w polu komentarza :-) Ja sam wolę jawne przestrzenie nazw dla wszystkich, ale najprostsze programy lub, co najmniej, użycie określonych elementów * w * przestrzeni nazw zamiast importowania całej partii. Jednak ta konkretna dyskusja jest styczna z pytaniem i moją odpowiedzią. – paxdiablo

Powiązane problemy