Float / double in c++

Hallöchen.
Habe ein Problem mit der richtigen Darstellung der Fließkommazahlen.

Hier ein mein Code:

"
#include

using namespace std;

int main()
{
float FLOAT = 0.0;
double DOUBLE = 0.0;
double DOUBLE2;
float FLOAT2;

FLOAT = (9/5);
DOUBLE = (9/5);
DOUBLE2 = 1.123456789;
FLOAT2 = 1.123456789;

cout

Howdy,

schau dir mal das iomanip an, dort insbesondere das setprecision.

http://www.cplusplus.com/reference/iostream/manipula…

Gruss
norsemanna

Hat an den Problemstellen leider nichts geändert!
Hier ein PrtSc vom Versuch mit „fixed“:

http://i43.tinypic.com/qx8ahd.jpg

Hallo!

Hat an den Problemstellen leider nichts geändert!
Hier ein PrtSc vom Versuch mit „fixed“:

Deine Divisionen sind alles Integerdivisionen, was ja auch an der Ausgabe von **cout unmittelbar erkennbar ist. 9/5 ist 1, das einer float-Variablen zugewiesen dann 1.0.

Jan**

Deine Divisionen sind alles Integerdivisionen, was ja auch an
der Ausgabe von **cout unmittelbar
erkennbar ist. 9/5 ist 1, das einer float-Variablen zugewiesen
dann 1.0.

Jan**

Ganz ehrlich gesagt konnte ich mir das, anhand dieses Artikels schon denken ( /t/java-gibt-mir-zu-wenig-kommazahlen-aus/4314830
Nur nützt es mir wenig in c++ an die Zahlen ein „d“ für double dranzuhängen.
Also wie kann man dieses Problem unter c++ lösen? :smile:

Hallo!

Nur nützt es mir wenig in c++ an die Zahlen ein „d“ für double
dranzuhängen.
Also wie kann man dieses Problem unter c++ lösen? :smile:

Eigentlich genauso, wie bei Java. Mit den Gleitkommaliteralen. 5. für double oder 5.f für float.

Jan

Eigentlich genauso, wie bei Java. Mit den Gleitkommaliteralen.
5. für double oder 5.f für float.

Jan

Jan, du bist der Mann der Stunde!
Vielen Dank! :smile:

lg

Hallo Leute

Es geht auch so:

cout 

lG
Martin B

Hallo!

Es geht auch so:

cout

Nein, das bringt gar nichts im Bezug auf die unerwünschte Integerdivision. Das Ergebnis wäre immernoch 1. Zudem ist das C. Wenn, dann C+±like mit double().

Das geht:
**cout
Wobei ein Operand mit double() reichen würde, wie auch ein Operand als Fließkommaliteral reicht.

Jan**

Howdy Jan,

Zudem ist das C. Wenn, dann C+±like mit double().

nun ja, für doubles ist das dann doch wohl eher Geschmackssache.

5.4.1 des C++ Standards erlaubt explizit den Cast:

 (type) value

5.4.2 besagt, dass zusätzlich auch die funktionale Schreibweise

 static\_cast(value)

erlaubt ist.

Dein

 type(value) 

ist überhaupt kein Cast, sondern ein Constructor. Für doubles macht das zwar keinen relevanten Unterschied, für richtige Objekte ggf. schon.

Gruss
norsemanna

ist überhaupt kein Cast, sondern ein Constructor. Für doubles
macht das zwar keinen relevanten Unterschied, für richtige
Objekte ggf. schon.

Sind in C++ nicht (A)b und A(b) äquivalente Schreibweisen für den gleichen Sachverhalt (Erzeugung eines anonymen Objekts vom Typ A durch Konstruktoraufruf mit b)?

#include 

struct B
{
 int k;
 B() : k(1) {}
};

struct A
{
 int i;
 int j;
 A() : i(2), j(3) {}
 A(B b) : i(b.k), j(b.k\*10) {}
};

int main()
{
 B b;
 A a;
 a = A(b);
 std::cout 
Ausgabe:


    
    1, 10
    1, 10

richtig, C+±Stil ist z.B.

double a(1.0);

d.h. es wird hier wirklich der Konstruktor einer Klasse ‚double‘ aufgerufen.

Ansonsten eine Anmerkung. Bei den heutigen Rechnern und Compilern macht float keinen Sinn mehr wenn es um Performance der Rechenoperationen geht. Intern wird sowieso mit double gerechnet. Ich empfehle, float nicht zu benutzen. Das spart auch solchen Angaben wie 1.3f und vermeidet Warnungen bei hohen Warning Levels.