2013-04-29 32 views
15

Podobny temat jest już omawiany na forum. Ale mam inny problem w następujący kod:Pokaż dwie cyfry po przecinku w C++

double total; 
cin>>total 
cout<<fixed<<setprecision(2)<<total; 

Jeśli dam wejście jako 100,00 następnie program wypisuje tylko 100, ale nie 100,00

Jak mogę wydrukować 100,00?

+6

Naprawdę? Daje to 100,00 w moim systemie (cóż, daje błąd dla brakującego średnika, ale po tym jak naprawiłem, że działa tak, jak się tego spodziewam). Może powinieneś opublikować rzeczywisty kod, z którym testowałeś to. –

+0

Czy prosisz o poprawkę do swojego kodu? czy pytasz o jakiś sposób wydrukowania liczby z dwoma miejscami dziesiętnymi? powinieneś opublikować opcje kompilatora (lub przynajmniej kompilator), którego używasz do uruchomienia swojego kodu, który byłby bardzo przydatny do wykrycia problemu;) – Bengalaa

Odpowiedz

1

Będzie to możliwe przy użyciu setiosflags (ios :: showpoint).

+0

'showpoint' nie powinien tu być konieczny, ponieważ zażądał 2 cyfry po przecinku. jego kod jest poprawny i powinien dać wynik, o którym mówi, że chce. –

50
cout << fixed << setprecision(2) << total; 

setprecision określa minimalną precyzję . Więc

cout << setprecision (2) << 1.2; 

wypisze 1,2

fixed mówi, że nie będzie stałą liczbę cyfr dziesiętnych po przecinku

cout << setprecision (2) << fixed << 1.2; 

wypisze 1,20

+1

Ponadto znaczenie 'setprecision' zależy od sposobu formatowania wyjścia zmiennoprzecinkowego:' fixed', 'scientific' lub' floatfmt() '(domyślnie). –

+0

Czy ten system/implementacja jest zależna? Wielu twierdzi, że showpoint nie powinien być konieczny ... I tak też jest w przypadku mojego systemu. – Antonio

+0

@JamesKanze ['defaulfloat'] (http://en.cppreference.com/w/cpp/io/manip/fixed) został dodany do C++ 11 – nodakai

2

Najłatwiej zrobić to, używa printf cstdio. Właściwie to jestem zaskoczony, że ktoś wspomniał o printf! W każdym razie, trzeba podać bibliotekę, tak ...

#include<cstdio> 

int main() { 
    double total; 
    cin>>total; 
    printf("%.2f\n", total); 
} 

To będzie drukować wartość „total” (to co %, a następnie ,total robi) o 2 punkty pływające (to co .2f ma). A \n na koniec, to dopiero koniec linii, a ten współpracuje z opcji kompilatora online judge UVA, to jest:

g++ -lm -lcrypt -O2 -pipe -DONLINE_JUDGE filename.cpp 

kod, który próbujesz uruchomić nie będzie działać z tej opcji kompilatora .. .

+0

Może to być przydatne podczas czytania http://stackoverflow.com/ pytania/2872543/printf-vs-cout-in-c: printf może być nadal używany w C++, ale w wyjątkowych przypadkach. – Antonio

+1

Lol, w jaki sposób UVa judge, -lcrypt lub jakakolwiek inna opcja kompilatora jest nawet zdalnie powiązana z pytaniem? –

+0

uhh, 3 lata temu dobrze odpowiedziała sobie XD, kiedy znalazłem to pytanie, zaczynałem od programowania konkurencyjnego, więc pomyślałem, że ta "dodatkowa informacja" na moją odpowiedź może pomóc ludziom, którzy zaczęli z konkurencją programowanie również :) – Bengalaa

2

możliwe jest wydrukowanie numeru 15 dziesiętny w C++ przy użyciu następujących:

#include <iomanip> 
#include <iostream> 

cout << fixed << setprecision(15) << " The Real_Pi is: " << real_pi << endl; 
cout << fixed << setprecision(15) << " My Result_Pi is: " << my_pi << endl; 
cout << fixed << setprecision(15) << " Processing error is: " << Error_of_Computing << endl; 
cout << fixed << setprecision(15) << " Processing time is: " << End_Time-Start_Time << endl; 
_getch(); 

return 0; 
+0

_ "include ... include" _ co? – MickyD

1

Używanie nagłówka pliku stdio.h można łatwo zrobić to jak zwykle jak C. przed użyciem% .2lf (ustaw konkretną liczbę za% specifier) ​​używając printf().

Po prostu drukuje określone cyfry po przecinku.

#include <stdio.h> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    double total=100; 
    printf("%.2lf",total);//this prints 100.00 like as C 
} 
Powiązane problemy