Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » float immer abrunden?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
05.09.2003, 19:47 Uhr
BeS



Hallo,
eigentlich ein ganz einfaches Problem, ich weiß aber keine Lösung. Ich will eine float Zahl immer mit der ersten Nachkommastelle ausgeben, dabei soll aber immer abgerundet werden.
Z.B. soll bei 1.38 1.3 ausgegeben werden, also eigentlich einfach nach der ersten Stelle abschneiden.

Hat jemand eine Idee wie ich das machen kann?

Danke!
BeS
--
If art interprets our dreams, the computer execute them in the guise of programs!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.09.2003, 19:51 Uhr
~Anfänger00
Gast


Hab hier mal vor ein paar Tagen ne Funktion zum Runden geschrieben
Du musst nur nocht double durch float austauschen.
es gibt natürlich auch ne Funktion der Standart library,die is auch schneller,
ich hab nur vergessen wie sie geht..

C++:
#include <iostream.h>

void warten()
{
char exit[2];
cout<< " Beenden(b): ";  // Wartet  [getchar() geht im dev-c++ compiler nicht]
cin>>exit;
return;
}
double runden(double x)
{
int counter=0;
double i=0,p_m=0;

do
{
if(counter%2 == 0)
p_m=0;
if(counter%2 == 1)
p_m=0.5;
if(i >= x)
{
if(x < i)
{
x = i - p_m;
}
else
x = i + p_m;
break;
}
else
{
i+=0.5;
}
counter++;
}// do
while(true);
return x;
}

int main()
{
double x;
cout<< " Zahl eingeben: ";
cin>>x;
cout<<" Gerundet: "<<runden(x)<<endl;
warten();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.09.2003, 19:59 Uhr
Pablo
Supertux
(Operator)



Bearbeitung:


C++:
#include <iomanip>
#include <iostream>
using namespace std;
int main(){
    float pi = 3.141592;
    cout << setprecision(2) << pi << endl;
}



Die Header Datei iomanip.h muss includiert werden.
Die Ausgabe ist: 3.1



--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.09.2003 um 20:03 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.09.2003, 20:14 Uhr
BeS



Hallo,
ich hätte vielleicht sagen sollen das ich eine Lösung für C brauche...

@~Anfänger00: um das Problem "herum-programmieren" ist kein Problem, dafür habe ich auch schon eine Lösung. Ich habe nur gedacht bzw. gehofft das es da eine elegantere Methode gibt.
--
If art interprets our dreams, the computer execute them in the guise of programs!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.09.2003, 20:25 Uhr
Pablo
Supertux
(Operator)


Tut mir leid. Ich bin eigentlich der C-Typ, ich mag mehr C als C++, aber das habe ich in C noch nie gebraucht, deshlab benutze weiß ich das nie.

Man kann (soweit ich weiß) das printf machen, indem man das richtige Format wählt. Jetzt weiß ich es nicht auswendig.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.09.2003, 20:30 Uhr
0xdeadbeef
Gott
(Operator)



C++:
double round(double x) {
  return int((x * 10) + 0.5) / 10.0L;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.09.2003, 20:31 Uhr
0xdeadbeef
Gott
(Operator)


In C:

C++:
double round (double x) {
  return ((int) (x * 10 + 0.5L)) / 10.0L;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.09.2003, 20:32 Uhr
0xdeadbeef
Gott
(Operator)


Oder als Makro:

C++:
#define round(x) ((int) ((x) * 10 + 0.5L) / 10.0L)


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.09.2003, 20:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
dein code rundet wirklich
es sollte nur die x-te stelle weggeschnitten werden
also das +0.5 weglassen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.09.2003, 20:53 Uhr
Pablo
Supertux
(Operator)


So wie ich es verstanden habe, will @BeS nur die erste Nachkommestelle eines floats ausgeben, d.h wenn pi ode e ausgegeben werden, muss 3.1 bzw. 2.7 ausgegeben werden. Geht das nicht %1f oder so?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: