Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Kommastellen und position festlegen

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
22.09.2008, 17:10 Uhr
Ollom



Wie kann ich bei der ausgabe von double zahlen die kommastelle auf eine stelle begrenzen. macht man das bei der ausgabe oder gleich bei der header datei in den klassen? Und wie kann ich wenn ich 3 unterschiedlich lange zahlen ausgebe, diese so positionieren das das komma immer untereinander steht? Nen bsp wäre ganz cool.
Dieser Post wurde am 22.09.2008 um 17:11 Uhr von Ollom editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.09.2008, 18:40 Uhr
öni



Beispiel aus dem Web....

www.cpp-entwicklung.de/cpplinux/cpp_main/node5.html


Code:
Genauigkeit von Gleitkommazahlen

Die Anzahl der Ziffern von Gleitkommazahlen wird mit precision() gesteuert. Anders als bei der Breite gilt diese Festlegung dauerhaft, das heißt bis zum nächsten Aufruf von precision(). Wenn die interne Darstellung mehr Ziffern enthält, wird die Ausgabe passend gerundet.

  cout.precision(6);

  cout << 1234.5678 << endl;  // ergibt: 1234.57

Auch hier haben Sie die Möglichkeit, die Einstellung der Ziffern über einen Manipulator vorzunehmen, genauer gesagt über setprecision(). Da dieser intern auf die gerade beschriebene Methode zurückgeführt wird, gelten auch dessen Einstellungen bis auf weiteres.

  cout << setprecision(6)

       << 1234.5678 << endl;  // ergibt: 1234.57
Besonders bei wissenschaftlichen Anwendungen gibt man die Ergebnisse oft in der so genannten Exponentialdarstellung aus, also als $x\cdot 10^n$ oder kurz $x {\rm e}+n$. Um eine solche Ausgabe zu erreichen, müssen Sie das Flag ios::scientific setzen. Dann stellen Sie mit precision() die Zahl der Nachkommastellen ein.

  cout.setf(ios::scientific);

  cout.precision(4);

  cout << 1234.56789012345 << endl;  

  // ergibt: 1.2346e+03
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.09.2008, 21:14 Uhr
mmc20
puss in boots


hallo,
zb. einfach die formatierungen von printf (bzw sprinf) nutzen

C++:
    double d1(1.2345), d2(102.1003);
    printf( "%12.3f\n", d1 );
    printf( "%12.3f\n", d2 );


"12.3": 12 sind die anzahl der stellen ist die die ausgabe belegen kann (das komma/punkt zählt mit), und 3 die nachkommastellen.

bzw. mit cout, siehe link (in post 001)

Dieser Post wurde am 22.09.2008 um 21:17 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.09.2008, 13:18 Uhr
Ollom



aber wird printf nicht nur in C verwendet? zumindest laut unserem prof ist cout die bessere variante für c++.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.09.2008, 14:47 Uhr
ao

(Operator)


Schon. Aber du hast ja nicht verraten, welche Sprache es sein sollte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.09.2008, 15:42 Uhr
Tron



Moin,

hier mal ein kurzes Beispiel für Formatierungen mit cout:


C++:
// format.cpp
#include <iostream>
#include <iomanip>

const int anzahl = 10;

int main() {
  float mwst=19.0;
  float preise[] = {0.3, 0.15, 5, 7.6, 8.89, 15, 17.4, 23.45, 120, 105.03};
  char *artikel[] = {"Kabel","Knickschutz", "Farbband","Adapter",
                     "Disketten","Nullmodem", "Maus","Tastatur",
                     "Toner","Gehaeuse"};

  // Ausgeben der Daten auf einer Breite von 42 Zeichen.
  // Ist die entsprechende Datenbreite kleiner wird links mit Leerzeichen aufgefüllt.
  std::cout.width(42);  

  std::cout <<"PREISLISTE\nArtikel\t\tNetto\tBrutto" <<std::endl;
  for (int i = 0; i < anzahl;i++)
  {
    // Füllzeichen hier: Punkt um die gewünschte Breite einzustellen.
    // Typ ist char.
    std::cout.fill('.');
    // Anzahl der Kommastellen festlegen.
    std::cout.precision(2);
    // Festkommadarstellung einschalten sonst erhält man die Exponentialdarstellung.
    std::cout.setf(std::ios::fixed);
    // Ausrichtung der Daten festlegen hier: links.
    std::cout << std::setiosflags(std::ios::left)
              // Festlegen der Breite bevor die Daten eingefügt werden.
              << std::setw(11) << artikel[i]
              // Aufheben der zuvor getroffenen Einstellung hier: links.
              << std::resetiosflags(std::ios::left)
              // Anzeigen des Positiven Vorzeichen.
              // Standardmäßig nur bei negativen Zahlen.
              << std::setiosflags(std::ios::showpos)
              << std::setfill(' ')
              << std::setw(10) << preise[i]
              // Vorzeicheneinstellung ändern, die Füllzeichen werden jetzt
              // zwischen Vorzeichen und Zahl eingefügt.
              << std::setiosflags(std::ios::internal)
              << std::setw(9) << preise[i]*(1 + mwst/100)
              // Aufheben der zuvor getroffenen Einstellung.
              << std::resetiosflags(std::ios::showpos | std::ios::internal)
              <<std::endl;
  } // Ende for
  return 0;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.09.2008, 17:18 Uhr
Ollom



wofür schreibt man eingentlich immer das std::irgendwas
ich habe mal was gelesen das das was mit dem using namespace std zu tun hat, aber was genau?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.09.2008, 22:39 Uhr
öni



So nun kommt mal ne Laien Antwort könnt sie gerne verupfen.......
cout und cin und noch weitere sind in der namespace std definiert. Nun kannst du deinem Compiler einmal sagen er soll doch bitte die namespaces std verwenden:

Code:
using namespace std;

oder du kannst dir auch sagen, ach was ich benutz doch sowieso nur einmal die namespaces std dann schreibe ich lieber einmal

Code:
std::

Und wie du siehst hat sich Tron gedacht zu was einmal "using namespace std;" schreiben wenn ich auch 100mal std:: schreiben kann,...... *scnr*
Darüber hinaus gibt es noch mehr namespaces, die du auch zum Teil selber definieren und erstellen kannst, zuwas das ganze Nütze ist, darf dir nun ein anderer erklären, soviel zu meinem Wissen.

Dieser Post wurde am 23.09.2008 um 22:40 Uhr von öni editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.09.2008, 23:25 Uhr
Hans
Library Walker
(Operator)


Hi,

man kann entweder

C++:
using namespace std;


schreiben, oder wie Tron

C++:
std::cin ...
// bzw.
std::cout ...



Im namespace std steckt 'ne ganze Menge drin, das man (meisst als Fortgeschrittener) nicht unbedingt immer alles haben will. Mit using namespace std; bekommt man das aber alles geliefert, ob man will oder nicht.

Um sich nur das auszusuchen, was man davon braucht, wählt man die zweite Variante und schreibt std::, vor die Funktion aus dem namespace std, die man gerade braucht. Das ist jetzt zwar Formal nicht 100%ig richtig, aber für den Anfang ausreichend.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.09.2008, 10:11 Uhr
Kest
saint


>std< steht für >standard<. Man bezieht sich so explizit auf die Standardbibliotheken.

using-Direktiven ("using namespace ...") sollte man lieber vermeiden, weil dadurch alle Namen so verfügbar gemacht werden, als ob sie gar nicht in einem Namensbereich deklariert worden wären. Wenn man mehr als eine using-Direktive verwendet, kommt es häufig zur Namenskollisionen. Dann muss man using-Deklarationen verwenden.

Eine using-Direktive ist dann von Nutzen, wenn du sie entsprechend lokal hältst, und Namenskollisionen im Voraus ausschließt, dann erleichtert sie das Tippen: man muss nicht jedes Mal "std::" schreiben.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 24.09.2008 um 10:14 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: