2009-08-18 10 views
0

Beispiel: Wenn ich 7.2828 habe, möchte ich nur die 2828 als Ganzzahl bekommen.Kann ich den Floating-Teil eines Double in eine ganze Zahl konvertieren (ohne String-Konvertierungen)?

+6

Ich weiß, das ist ein Duplikat (ich habe es irgendwann beantwortet), aber Sie erkennen, 7,28 und 7,0028 werden beide mit einer Antwort von 28 enden, richtig? Sie werden keine Ahnung haben, was das ursprüngliche schwimmende Teil war. –

+2

können Sie klären, wie Sie diese beiden Zahlen behandelt werden möchten: 7.02828 und 7.000002828 –

+0

Wie möchten Sie, dass Leute wie 0,000000000125657542619998 behandelt werden? – MartW

Antwort

3

Dezimal ist dein Freund ...

Konvertieren Sie Ihre Zahl in eine Dezimalzahl und dann das tun.

 decimal d = (decimal)7.2828; 
     int val = decimal.GetBits(d - decimal.Truncate(d))[0]; 

die nette Sache über eine Dezimalzahl ist, dass es die val als int speichert und speichert dann nur eine Kommaposition.

3

Wenn d der ursprüngliche Wert ist, tun Sie einfach Folgendes.

((int)(d * 10000)) % 10000 
+0

ist nicht speziell für diese Nummer. wenn Sie die Anzahl der Ziffern unter dem Punkt nicht kennen. 10000 funktioniert nicht. – jmayor

+0

In C++ sollten Sie static_cast verwenden, um double in int zu konvertieren. Der endgültige Code sollte wie folgt aussehen: static_cast (d * 10000.0)% 10000. C-Cast ist nur für die Kompatibilität. Bitte, benutze es nicht ohne Grund. –

+0

JIa3ep, die Frage ist mit C# markiert. (Eigentlich, aus irgendeinem Grund, war die Frage ursprünglich für Java :-)). – avakar

0

In C++ verwenden double modf(double, double *):

double value; 
double fractional_part; 
double integer_part= modf(value, &fractional_part); 
int fractional_part_as_integer= fractional_part * 10000; // insert appropriate scale here. 
0

Ich glaube nicht, Sie können. Die meisten CPUs können 7.2828 nicht als Double darstellen (IBM Mainframes sind die Ausnahme). Der Grund ist, dass sie das Doppelte als eine Summe von Potenzen von 2 darstellen. Der "7" -Teil ist einfach: 1 + 2 + 4. Das Fracational Bit ist härter: 0,25 + 0,0,03125 + 0,0009765625 ..... - eine unendliche Sequenz. Aus praktischen Gründen ist diese Sequenz abgeschnitten. Und das resultierende Doppelte wird nahe 7.2828 sein. Vielleicht 7.282800000000001245. Dies passt wahrscheinlich nicht in eine (32 Bit) Ganzzahl.

Verwandte Themen