double Convert.ToString()

  • geschlossen
  • C#

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • hi
    ich hab wieder ein problem und zwar möchte ich die variable new_y von typ double in einen string konvertieren...

    das ganze geht wunderbar:

    Quellcode

    1. string x = Convert.ToString(new_y);


    jetzt das problem...
    bei diesem new_y sind werte wie:-0.00000070477278768521501
    gewöhlich
    nun möchte ich dies auch als string haben aber die konvertierung macht daraus die wissenschaftliche schreibweise
    also hab ich dann im string:"-7,04772787685215E-07"

    wie kann ich verhindern das bei der konvertierung die wissenschaftliche schreibweise genutzt wird?

    mfg xparet0209

    das problem besteht zwar noch aber ich hab eine funktion gefunden mit der sich ausgaben formatieren lassen:

    zb:
    x = 0,0005

    console.write("{0:F4}",x);
    0,0005


    console.write("{0:F5}",x);
    0,00050



    console.write("{0:F3}",x);
    0,000


    sozusagen gibt die zahl hinter F die genauigkeit an
    jetzt muss ich nur noch wissen wie man statt der zahl hinter F eine ganzzahlige variable hinschreiben kann
    als wenn der wert der varible hinter dem F stehen würde ...
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Teschnofan ()

  • also erstmal ein riesiges dankeschön an SKYTE:D

    den code den du oben geschrieben hast angeglichen und schon funzt alles bestens^^
    aber verstanden hab ich noch nicht xD

    ich dachte die zahl hinter F muss von typ int sein
    dass heißt
    console.write("{0:F{1}}",x, Convert.ToInt32(genauigkeit));

    müsste auch funktionieren....
    System.FormatException wurde nicht behandelt.
    Message="Die Eingabezeichenfolge hat das falsche Format."

    allerdings erscheint dann diese meldung:(

    was ich an dem dort oben nicht verstehen sind die
    anführungsstriche und die pluszeichen
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]
  • Ok, also:

    Hier sind ja Anfuehrungszeichen:

    xparet0209 schrieb:

    console.write("{0:F4}",x);


    Das bedeutet, dass es ein String ist.
    Also z.B. 4 ist ein int, aber "4" ist ein String.
    Hinter dem F steht zwar eine Ganzzahl, aber nicht im int Format, sondern im String Format.

    Und ich hab halt den String in 3 Teile geteilt, da man in C# wohl Strings mit dem Plus Operator zusammenfuegen kann.
    Also "hallo" ist dann das Gleiche wie "hal"+"lo" oder "ha"+"l"+"lo", usw.

    Jetzt wusst ich nicht, ob man in C# den Plus Operator zwischen String und int verwenden kann, also bin ich auf Nummer sicher gegangen und hab die Variable in String konvertiert.

    Also eben:
    int var = 4;
    "{0:F"+Convert.ToString(var)+"}" // das ist dann das Gleiche wie "{0:F"+"4"+"}" , also "{0:F4}"


    Also ganz kurz:
    ich dachte die zahl hinter F muss von typ int sein

    Nein.
    Hinter "F" muss zwar eine Ganzzahl, aber nicht vom Typ int, sondern vom Typ String, da ja das ganze Ding ein String ist.
    User helfen Usern: die FSB-Tutoren! (zum Chat) (zur Gruppe)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Skyte ()

  • ey super
    du kannst dinge besser erklären als mein info lehrer^^
    also ich fin das super was du hier machst
    du bist ziemlich aktiv im coding bereich und hilfst wo du kannst...
    gäbe es jetzt so ein voting dings hätte ich für dich gestimmt^^

    ich hab alles verstanden
    aber mich würde es immer noch interessieren ob es noch eine andere möglichkeit gibt

    so dass bei der konverierung einer gleitkommezahl in ein string immer(!!)
    die normale schreibweise konvertiert wird und nicht die wissenschaftliche
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]
  • Hehe, danke fuer die netten Worte.

    Also kuck dir vllt am besten mal das hier von dieser Seite an.

    Na jedenfalls wenn ich das richtig verstanden habe, dann muesste es so funktionieren:

    Quellcode

    1. NumberFormatInfo provider = new NumberFormatInfo();
    2. provider.NegativeSign = "-";
    3. provider.NumberDecimalSeparator = ".";
    4. double x = 124.00428;
    5. string output = Convert.ToString(x, provider);
    6. Console.WriteLine(output);


    Fuer weitere Einstellungen des Providers: NumberFormatInfo Properties (System.Globalization)


    PS: Vllt funktioniert es sogar so:

    Quellcode

    1. NumberFormatInfo provider = new NumberFormatInfo();
    2. double x = 124.00428;
    3. string output = Convert.ToString(x, provider);
    4. Console.WriteLine(output);
    User helfen Usern: die FSB-Tutoren! (zum Chat) (zur Gruppe)
  • leider funktionieren die vorschläge nicht
    allerdings ist mir an dem beispiel aufgefallen (habs bisschen verändert)
    dass bei der konvertierung von decimal to string
    dieses problem nicht auftritt

    was ich nicht ganz verstehe ist
    warum man bei decimal am ende ein großes M hinschreiben muss...

    Quellcode

    1. decimal DecimA = 0.0000000000000000000000252645135[B]M[/B];


    in der zwischen zeit ist mir aber noch ein lösungs ansatz eingefallen:
    man konvertiert den strink ganz normal und sucht dann im string nach einem großen E
    dann teilt man man die strings auf
    der eine string besteht dann aus den zeichen hinter E bis zum ende des strings
    (ohne E)
    diesen wandeln wir in double um und rechnen dann 1 / (10^(der wert))
    das problem ist den punkt bzw komma aus dem 1. teilstring rauszubekommen...

    ich hab schon
    provider.NumberDecimalSeparator = "";
    versucht allerdings meldet der kompiler einen fehler...
    Das Dezimaltrennzeichen kann nicht die leere Zeichenfolge sein.


    dass heißt man könnte alternativ dass machen:

    2.teilstring = 1/(10^länge des strings vor dem komma)
    die länge könnte man mit convert.tostring(convert.toint32(double variable)).length ermittlen
    allerdings bin ich mir unsicher ob convert.toint32 auch gleich rundet
    denn dann hätte man ein problem bei einem wert wie 9,9
    statt 1 würde die zeile 2 zurück geben, weil die konvertierung ja auf 10 rundet...

    wenn dies kein problem wäre könnte man
    jetzt den 2.teilstring einfach vor den veränderten
    1.teilstring ausgeben (natürlich ohne leerzeichen dazwischen^^)
    und von dem 2.teilstring noch die hintere 1 löschen
    leider hab ich jetzt keine ide wie man das bewerkstelligen könnte...

    z.B string X = 4,2E+5
    string1 = 4,2
    string2 = 5

    dann:
    string2 = 0,00001
    string1 = 42

    dann:
    string2 = 0,0000
    ausgabe: 0,000042
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von xparet0209 ()

  • allerdings ist mir an dem beispiel aufgefallen (habs bisschen verändert)
    dass bei der konvertierung von decimal to string
    dieses problem nicht auftritt

    Hm... na das ist es doch.^^

    Kannst ja sowas machen:

    Quellcode

    1. double x = 0.00000012400428;
    2. string output = Convert.ToString(Convert.ToDecimal(x));
    3. Console.WriteLine(output);



    was ich nicht ganz verstehe ist
    warum man bei decimal am ende ein großes M hinschreiben muss...

    http://msdn.microsoft.com/de-de/library/364x0z75(VS.80).aspx schrieb:

    Ohne das Suffix m wird die Zahl als double behandelt, was zu einem Compilerfehler führt.
    User helfen Usern: die FSB-Tutoren! (zum Chat) (zur Gruppe)

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von Skyte ()