[C#] String double problem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Com:J, 1. Dezember 2008 .

Schlagworte:
  1. 1. Dezember 2008
    String double problem

    Hi liebe RR ler ich
    hab ne ewig lange zahl 100 mal die 9 dann ne 1 und dann 100 mal ne 0 und dann ne 9
    Code:
    999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    die erstell ich in nem sting wie ist ja egal
    wandel se dann um in ne double weil ich die wurzel draus zeihen will
    klappt au und dann geb ich es aus
    dann kommt aber so ne blöde antwort raus mit der ich nix anfangen kann
    da kommt 1.0E+101 raus wie bekomm ich des hin das ich des als geschrieben zahl bekomme ???
    ach ja die 1 soll variabel eingegeben werden können wie schon programiert ^^

    Code:
     
     Console.WriteLine("hey meine süße gib die zahl ein do du nach den 9er haben willst:");
     double eingabe;
     eingabe = Convert.ToDouble(Console.ReadLine());
     string test = "";
     for (int i = 1; i <= 100; i++)
     {
     test = test + "9";
     }
     test = test + eingabe;
     for (int a = 1; a <= 100; a++)
     {
     test = test + "0";
     }
     test = test + "9";
     double string2;
     string2 = Convert.ToDouble(test);
     string2 = Math.Sqrt(string2);
     test = Convert.ToString(string2);
     Console.WriteLine(test);
     Console.ReadKey();
     
  2. 1. Dezember 2008
    AW: String double problem

    Öhm hat die Zahl eine fixe Länge oder is die auch variabel und warum wandelst du die Zahl anschließend wieder in einen String um, um den dann auszugeben? Kannst du die umgewandelte Zahl ausgeben?
    Ich denke, dass der Fehler von der Doubleumwandlung zur Stringumwandlung liegt, kann aba auch sein das der vorher schon blödsinn macht bei so einer langen Zahl.

    Also wenn ich das richtig versteh sind das 202 Stellen, ohne Nachkommastellen.
    Das Double Zahlenformat hat 52 Mantissenbits und 11 Exponentenbit (und ein Vorzeichenbit).
    d.h. du kannst eine Zahl darstellen, die 4.503.599.627.370.496 (2^52) als Ziffernstellen besitzt und einen Exponenten, der 2048 (2^11) Zahlen darstellen kann. Nachdem du jedoch eine ganze Zahl hast wird dir mit den Standard Zahlenformaten zwangsläufig ein Datenverlust auftreten, da diese Zahl im Double Format nicht darstellbar ist.

    mfg duddl
     
  3. 1. Dezember 2008
    AW: String double problem

    naja dachte wenn ich die wieder zurück in nen string pack wird se komplet angezeiht dem war aber nicht so. jap die zahl hat ne feste länge 100 mal die 9 dann ne variable zahl von 0-9 dann 100 0 und am schluss ne 9 also 202 stellen.

    also kann ich mir die nicht ausgeben lassen. wenn ich des richtig verstanden hab

    als dualzahl erhalt ich die ausgabe : 1.0E+101
    als string genau die gleiche :/
     
  4. 2. Dezember 2008
    AW: String double problem

    Wenn ich dich richtig verstanden hab, gibt es ja nur 10 Kombinationen (weil nur die Ziffer nach den Neunern variabel is). Das heißt, du kannst dir die Werte vorher berechnen lassen (z. B. hier) und dann in ein String-Array schreiben.

    Code:
    string[] sZahlen = new string[10];
    
    sZahlen[0] = "99999...0...09";
    sZahlen[1] = "99999...1...09";
    ...
    
    switch (Console.ReadLine())
    {
     case "0":
     Console.WriteLine(sZahlen[0]);
     break;
    
     case "1":
     Console.WriteLine(sZahlen[1]);
     break;
    
     ...
    Es wird einfach je nach Eingabe die entsprechende Zahl ausgegeben, ohne Berechnung.
     
  5. 2. Dezember 2008
    AW: String double problem


    1.0E+101 entspricht: 1.0 x10^101

    Da ist nichts falsch gelaufen! Ebensowenig ist das eine Dualzahl. Du möchtest wohl eine ewig lange Zahl ausgeben lassen, also 101 Stellen. Und da denkt sich die "Intelligenz" des "Compilers", dass das nicht sinnvoll wäre, und du das ganze wohl doch gerundet und gekürzt haben willst. Intern (schau mal per Debug durch) wird da schon der richtige Wert drinnen stehen.

    Schau mal hier: Strings formatieren mit C# .
    Das sollte dir helfen.

    Des Weiteren wird bei einer Ausgabe sowieso jede Zahl in einen String konvertiert! Deshalb ist es (fast) sinnlos, vorher noch die Double-Zahl in einen String zu konvertieren und auf ein anderes Ergebnis zu hoffen.


    Allerdings würde die Lösung von Gibbon wohl der bessere Weg sein.


    - - -
     
  6. 2. Dezember 2008
    AW: String double problem

    Eventuell wäre das hier eher für den vorhaben geeignet.
    Im Link ist erklärt, wie man schriftlich Wurzeln zieht, wobei stehts nur einzelne Zahlenteile betrachtet werden und somit die Gesamtlänge der Zahl keine Rolle spielt. Daraus kann man dann einen Algorithmus machen, der dann die Wurzel löst. Natürlich wäre die Zahlenformatierung (wenn möglich geeigneter)
     
  7. 6. Dezember 2008
    AW: String double problem

    Das hier könnte dir auch noch weiterhelfen: Algorithmen zur Wurzelberechnung.
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.