Autor Beitrag
Sebbi2712
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 13.07.09 12:00 
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


Zuletzt bearbeitet von Sebbi2712 am Mo 13.07.09 12:44, insgesamt 2-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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.


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