Entwickler-Ecke

Basistechnologien - Anzahl von Nachkommastellen eines Strings ermitteln


Sebbi2712 - Mo 13.07.09 12:00
Titel: Anzahl von Nachkommastellen eines Strings ermitteln
Hallo Leute.
Im Internet konnte ich leider keine Homepage finden, in der erkärt wird, wie man die Anzahl der Nachkommastellen eines Double ermitteln kann.
Beispiel:
double Zahl 1 = 12,5498
int AnzNullstellen = .......................................
--> Ergebnis 4

Habt Ihr da eine Idee, wie man das Problem lösen kann?

Gruss
Sebastian


Moderiert von user profile iconChristian S.: Topic aus IO, XML und Registry verschoben am Mo 13.07.2009 um 12:44


JüTho - Mo 13.07.09 12:12

Wie kommst du nur darauf, dass das etwas mit IO oder XML oder Registry zu tun hat... :roll:

Die Frage kann natürlich nicht beantwortet werden. Ein double hat keine Nachkommastellen, sondern ist "irgendein" fester Wert. Ein String hat auch keine Nachkommastellen, weil es für ihn "irgendwelche" Zeichen sind und er nicht zwischen 'a', '1' und '.' oder ',' unterscheidet.

Wenn du es unbedingt wissen willst, dann kannst du es selbst ausrechnen: Länge des Strings, Position des Dezimaltrenners (welcher das ist, ergibt sich aus NumberFormatInfo.NumberDecimalSeparator) - dann einfache Subtraktion.

Jürgen


Sebbi2712 - Mo 13.07.09 12:40

Hi Jürgen.
Danke für die schnelle Antwort.

Mir ist ein Fehler unterlaufen....Es handelt sich um eine Zahl des Typs double!
String wurde hier fälschlicherweise genannt, wird auch gleich im ersten Beitrag geändert..

Gibts dann eine Möglichkeit die Nachkommastellen des double-Typs zu ermitteln, oder muss dieser erst in String umgewandelt werden, sodass man die Länge des Strings und die Pos. des Dezimaltrenners ausrechnt...?

Gruss
Sebastian


Kha - Mo 13.07.09 13:53

Wo kommen denn diese Zahlen her und wofür benötigst du die Anzahl Nachkommastellen?
Grundsätzlich ist das Problem unlösbar, da du dafür ja eine absolut exakte Darstellung der Zahl benötigst, Dezimalzahlen im Binärsystem oft aber periodisch sind und daher nur angenähert werden können.
Vielleicht hätte man mit System.Decimal eine Chance, aber dazu müssten wir mehr über dein Problem wissen.


Sebbi2712 - Mo 13.07.09 15:16

Die Daten werden aus einer externen *.dat Datei eingelesen.
Man hat jeweils ein Koordinatenpaar aus X,Y und Z.
Mit den Werten wird anschliend verarbeitet, d.h. man führt Additionen, Winkelverschiebungen, etc.... aus..

Hab habe es nun so gemacht:
Werte werden ja als "string" eingelesen.
Diesen String nehem ich, Zähle die Anzahl der Ziffern. Anschließend suche ich nach dem Dezimaltrennzeichen ".". Parallel dazu läuft ein counter.
Am Schluss rechne ich Stringlänge - counter - 1, und schon habe ich die Anzahl meiner Nullstellen....

Zur Berechnung wandle ich meine Koordinaten in den Typ "double" um.

Jetzt der eigentliche Grund, warum ich die Nullstellen zählen muss:
Bei der anschließenden Dateiausgabe (*.dat - File) soll die Anzahl der Nachkommastellen wieder wie bei der Originaldatei sein.
Im Moment weiss ich aber leider nicht, wie man das Ergebnis des berechneten Dezimal-Wertes auf die gewünschte Anstall von Nachkommastellen rundet.


Nemag - Mo 13.07.09 16:13

user profile iconSebbi2712 hat folgendes geschrieben Zum zitierten Posting springen:

Im Moment weiss ich aber leider nicht, wie man das Ergebnis des berechneten Dezimal-Wertes auf die gewünschte Anstall von Nachkommastellen rundet.



C#-Quelltext
1:
2:
Decimal.Round(decimalint);
Double.Round(double,int);