Autor Beitrag
SpyderZ3r0
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 20.10.10 14:29 
Hi

Also ich hab eine double Variable die hat den Wert: 0.99999701976776123
Wenn ich die Variable jetzt in String umwandle Wert.toString();
bekomm ich den Wert: 0.999997019767761

Da fehlen mir jetzt die letzten stellen die brauch ich aber.

Was kann ich machen?

ich hab schon Wert.toString("0.0000000000000000000000000000000000000000"); versucht hat aber nix gebracht
kommt nur 0.99999701976776100000000000000000000000000000000 raus.
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 20.10.10 15:20 
der Computer kann nur eine Begrenzte Anzahl Nachkommastellen speichern. Das ganze ist relativ kompliziert, such einfach mal nach Suche bei Google GLEITKOMMAZAHL.
Musst du denn mit der Zahl rechnen? und wo kommt der Wert her?
SpyderZ3r0 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 20.10.10 15:34 
ich hab den wert schon im rechner in einer variablen.

Ich seh den wert ja im debug

Sobald der aber zu string convertiert wird fallen hinten zahlen weg
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 20.10.10 16:55 
wenns nur ums konvertieren und ausgeben geht:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
string swert = wert.ToString();
wert *= Math.Pow(10, swert.Length); //Alle Nachkommastellen vors Komma bringen
swert = "";
while (wert > 0)
{
   double t = wert % 10;                 //letzte stelle herausfinden
   wert -= t;                            //letzte stelle abziehen
   wert = wert / 10;                     //letzte stelle "löschen"
   swert = ((int)t).ToString() + swert;  //letzte stelle dem string hinzufügen
}
swert = "0."+swert;               //0. davorsetzen
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 20.10.10 16:58 
Du solltest den richtigen Formatstring verwenden. Vermutlich
ausblenden C#-Quelltext
1:
Wert.ToString("R")					

Aber den richtigen Formatstring solltest du dir nach deiner Definition von ~genau~ aus der Doku raus suchen.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 20.10.10 18:48 
Bei float's und double's müssen einfach die letzten Stellen gerundet werden, da ansonsten seltsame Rechenfehler auftreten. Auch ein Taschenrechner speichert intern mehr Stellen, als er anzeigt.

Wenn es dir wirklich auf die Stelle genau ankommt, solltest du lieber den Typ Decimal verwenden. Im Gegensatz zu float und double rechnet er im Dezimalsystem und kann daher immer verlässlich angezeigt werden.