Kommastellen "herausfiltern"

Kanonenfutter

Mitglied
Ich möchte gerne aus einer double Zahl die Gesamten Kommastellen als int Zahl "herausfiltern".
Zum Beispiel:

double Zahl 23,3453 ----> int Zahl 3453

Wie komme ich am besten dort hin?
 
Hallo!

Mit einem Zwischenschritt über einen String sollte es eigentlich klappen. Die grundlegende Vorgehensweise sieht so aus:

1.) Double in einen String konvertieren
2.) String aufsplitten in ein String-Array am Komma bzw. Punkt mit Split()-Methode
3.) Zweites Feld im String-Array konvertieren in einen Integer

Sieht im Code in etwa so aus (hab leider keinen Compiler zur Hand, also kanns sein, dass er evtl. so nicht ganz läuft *g*):
Code:
double dZahl = 23.3453;

string [] strArray = Convert.ToString(dZahl).Split('.');

int iZahl = Convert.ToInt32(strArray[1]);

Hoffe das wars was Du gesucht hast ... :)
 
Hi,

weis jetzt nicht, obs dafür ne extra Funktion gibt, was aber durchaus möglich wäre. Ich würde es folgendermaßen machen:
Code:
double Zahl = 23.3453;
string StrZahl = Zahl.ToString();
string split;
split = StrZahl.Split(".".ToCharArray());
string nachKomma = split[1];

Bitte verbessert mich, falls es falsch ist. War nur so ein Gedanke ..

MfG

EDIT : mkay, hat sich erledigt :p
 
Es geht auch ohne Split Funktion, allerdings ein bisschen komplexer :).
Code:
double dDouble = 23.2453;
double dKommastellen = (dDouble - (int)dDouble);
dKommastellen *= Math.Pow(10, (dKommastellen.ToString().Length-2) );

[EDIT] Nachtrag: Math gehört zum Namensraum System. Also vollständig System.Math.Pow(...) [/EDIT]
 
Ich finde die Lösung nicht gut.

Es ist nicht sichergestellt, dass WIRKLICH eine gültige Zahl gefunden wird.

Ich würd hier regular expression einsetzen. Da hat man auch wengiger Arbeit.

Chris
 
also ich würde die Zahl auch in einen String konvertieren und dann nach dem . spliten und den 2. Teil nehmen... ?!
 
Original geschrieben von XChris
Ich finde die Lösung nicht gut.

Es ist nicht sichergestellt, dass WIRKLICH eine gültige Zahl gefunden wird.

Ich würd hier regular expression einsetzen. Da hat man auch wengiger Arbeit.

Chris
Auf welche Lösung beziehst du dich? Ich wüsste nicht warum es bei meiner Lösung in bestimmten Fällen keine gültige Zahl ergeben sollte.

@Kanonenfutter: Seit ich vor langer langer Zeit herausgefunden habe, dass beim Konvertieren von Double nach Integer die Nachkommastellen einfach abgeschnitten werden, konnte ich mit diesem Umstand so manches Problem recht einfach lösen :p .
 
Also wenn ich hier im Forum Code poste, dann geb ich nur selten auch die Ausnahmebehandlung mit an, weils einfach zu viel Schreibarbeit ist. Und ein bisschen Spaß soll der andere Programmierer ja auch noch haben. *fg* ;)

Aber bitte sehr ...
Code:
double dZahl = 23.3453;

string [] strArray = Convert.ToString(dZahl).Split('.');

int iZahl = 0;

if (strArray.GetLength(0) > 1)
{
   iZahl = Convert.ToInt32(strArray[1]);
}

Das hier wäre eine Möglichkeit den Fehler abzufangen. Was tatsächlich sinnvoll wäre ist situationsabhängig. Möglicherweise wäre try-catch besser, aber auch "langsamer". :)

@ XChris
Ich würde gerne Deinen regulären Ausdruck sehen, der Dir die Nachkommastellen liefert.
 
man könnte ja eigentlich auch folgendes machen:
man könnte ja einfach das "0." durch "" ersetzen, dann bräuchte man kein split
Code:
double double_zahl = 10.12345;
int int_zahl = (int) double_zahl;   // = 10
string kommastellen = Convert.ToString(double_zahl - Convert.ToDouble(int_zahl));   // = 0.12345
kommastellen=kommastellen.Replace("0.","");  //--> 12345
das könnte dann man noch konvertieren in was man es will
 
Zurück