Eine Listbox addieren mit vielen Nullen

  • VB.NET

Es gibt 44 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Eine Listbox addieren mit vielen Nullen

    Hallo guten tag, ich bin lange nicht mehr online gewesen - ich habe hier ein bekanntes thema den ich früher schonmal gehabt habe aber leider habe ich probleme mit den Nullen.

    Ich habe auch diesen bekannten Programmiercode bekommen:

    VB.NET-Quellcode

    1. Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    2. Dim ergebnis As Decimal
    3. Dim zahl1 As Decimal
    4. Dim zahl2 As Decimal
    5. Decimal.TryParse(listBox1.Items(0).ToString(), zahl1)
    6. Decimal.TryParse(listBox1.Items(1).ToString(), zahl2)
    7. ergebnis = zahl1 + zahl2
    8. label1.Text = ergebnis.ToString()
    9. End Sub


    Dieser Programmiercode funktioniert sehr gut aber wenn man damit rechnet, kommt ein Ergebnis ohne die Nullen davor.

    Das heisst: Zahl 1 = 0.0000000000000000001602176634 + Zahl 2 = 0.0000000000000000003204353268

    Zum beispiel kommt als Ergebnis diese Zahl raus: 4806529902 ohne die nullen mit komma davor.

    Ich will aber das beim rechnen die nullen mit komma mitrechnet - vielleicht hat es für euch keinen sinn aber für mich schon und ist auch sehr wichtig für mich.

    Hat hierfür Jemand ein vorschlag bzw. ein etwas ähnliches Programmiercode das auch die nullen mit komma mitrechnet ?

    vielen dank für eure hilfe - ;(
    Hallo,

    die Punkte werdenbei dir ja aktuell nicht als Dezimalzeichen erkannt.
    Es gibt aber für TryParse noch eine 2. Variante (findet man in der Hilfe) wo man das "Format" und die "culturelle Umgebung" angeben kann.

    hab das mal eingebaut.

    VB.NET-Quellcode

    1. Dim style As System.Globalization.NumberStyles
    2. Dim Culture As System.IFormatProvider
    3. Dim ergebnis As Decimal
    4. Dim zahl1 As Decimal
    5. Dim zahl2 As Decimal
    6. style = System.Globalization.NumberStyles.Number
    7. Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")
    8. Decimal.TryParse(ListBox1.Items(0).ToString(), style, Culture, zahl1)
    9. Decimal.TryParse(ListBox1.Items(1).ToString(), style, Culture, zahl2)
    10. ergebnis = zahl1 + zahl2
    11. label1.Text = ergebnis.ToString()
    fehlerhaftes Fast-Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Hallo SoEinVBler: Danke ihnen für dieses Programmiercode es funktioniert ausgezeichnet wie es sein soll.

    vielen dank für ihre hilfe :D

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“ ()

    @VBUser77 Wenn sich in der ListBox numerische Werte befinden, sollte dies funktionieren:

    VB.NET-Quellcode

    1. Dim zahl1 = Convert.ToDecimal(listBox1.Items(0))
    2. Dim zahl2 = Convert.ToDecimal(listBox1.Items(1))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo guten tag zusammen, mir ist heute morgen aufgefallen das ich auch das Atomgewicht berechnen muss und um den richtigen wert zu erhalten benötigt man unbedingt 27 bis 31 Nullen nach den komma wie zum beispiel: Atomgewicht des Wasserstoffs = 0,000000000000000000000000000167262192369 + Elektrongewicht = 0,00000000000000000000000000000091093837015.

    Wenn ich zum beispiel: 0,000000000000000000000000000167262192369 + 0,00000000000000000000000000000091093837015 zusammenrechne ergibt eine summe von 258356029384 - das heisst: ich bekomme den wert 258356029384 ohne die Nullen davor sowie falschen wert draus!.

    Ich will es aber mit den Nullen mit komma haben - gibt es hierfür eine Ergänzung des Programmiercodes unten angegeben ?

    VB.NET-Quellcode

    1. Dim style As System.Globalization.NumberStyles
    2. Dim Culture As System.IFormatProvider
    3. Dim ergebnis As Decimal
    4. Dim zahl1 As Decimal
    5. Dim zahl2 As Decimal
    6. style = System.Globalization.NumberStyles.Number
    7. Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")
    8. Decimal.TryParse(ListBox1.Items(0).ToString(), style, Culture, zahl1)
    9. Decimal.TryParse(ListBox1.Items(1).ToString(), style, Culture, zahl2)
    10. ergebnis = zahl1 + zahl2
    11. label1.Text = ergebnis.ToString()

    VBUser77 schrieb:

    VB.NET-Quellcode

    1. Decimal.TryParse(ListBox1.Items(0).ToString(), style, Culture, zahl1)
    2. Decimal.TryParse(ListBox1.Items(1).ToString(), style, Culture, zahl2)
    Beratungsresistent?
    Lernbefreit?

    VBUser77 schrieb:

    Hallo RodFromGermany,danke für dein programmiercode hat mir sehr viel weitergebracht
    Eine Listbox addieren mit vielen Nullen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo, habe das programmiercode für das Elektronvolt genutzt und es funktioniert soweit richtig.

    VB.NET-Quellcode

    1. Dim style As System.Globalization.NumberStyles
    2. Dim Culture As System.IFormatProvider
    3. Dim ergebnis As Decimal
    4. Dim zahl1 As Decimal
    5. Dim zahl2 As Decimal
    6. style = System.Globalization.NumberStyles.Number
    7. Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")
    8. Decimal.TryParse(ListBox1.Items(0).ToString(), style, Culture, zahl1)
    9. Decimal.TryParse(ListBox1.Items(1).ToString(), style, Culture, zahl2)
    10. ergebnis = zahl1 + zahl2
    11. label1.Text = ergebnis.ToString()


    Allerdings fehlt mir auf das bei zusammenrechnen des Atomgewichts: 0,000000000000000000000000000167262192369 + 0,00000000000000000000000000000091093837015 = 0,0000000000000000000000000002 als ergebnis rauskommt und hört bei 28 stellige zahl auf.

    Normalerweise sollte den rest der zahl auch anzeigen aber die zahl geht nicht weiter. :huh: was könnte ich noch versuchen ?

    Hat jemand eine lösung hierfür ?

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „VBUser77“ ()

    VBUser77 schrieb:

    Hat jemand eine lösung hierfür ?
    Immer noch beratungsresistent?
    Statt

    VB.NET-Quellcode

    1. Decimal.TryParse(ListBox1.Items(0).ToString(), style, Culture, zahl1)
    2. Decimal.TryParse(ListBox1.Items(1).ToString(), style, Culture, zahl2)
    machst Du so was:

    VB.NET-Quellcode

    1. Dim zahl1 = Convert.ToDecimal(listBox1.Items(0))
    2. Dim zahl2 = Convert.ToDecimal(listBox1.Items(1))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany, ich habe ihr programmiercode

    VB.NET-Quellcode

    1. Dim zahl1 = Convert.ToDecimal(listBox1.Items(0))
    2. Dim zahl2 = Convert.ToDecimal(listBox1.Items(1))
    getestet aber es funktioniert immer noch nicht mit den nullen - denn es müssen 27 bis 31 Nullen nach den komma existieren bei Atomgewicht

    Die zahl was da rauskommt stimmt auch nicht überein

    Aber mit Elektronvolt klappt es richtig und kalkuliert auch alles :)

    Also, wenn ich das Atomgewichtzahl: 0.000000000000000000000000000167262192369 + 0.000000000000000000000000000167262192369 = mit den gleichen comboboxzahl rechne, dann kommt auch das richtige ergebnis raus:

    Ergebnis = 334524384738 auch wenn die nullen davor fehlen stimmt die zahl.

    Ich habe aber 3 Comboboxen wobei je unterschiedliche Atomgewichtszahlen berechnet werden müssen und grade hier wird das ergebnis falsch angezeigt. Alle 3 zahlen werden in einer listbox ausgegeben

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VBUser77“ ()

    VBUser77 schrieb:

    getestet aber es funktioniert immer noch nicht mit den nullen - denn es müssen 27 bis 31 Nullen nach den komma existieren bei Atomgewicht
    Mach aus Deinem Code ein kleines laufendes Testprogramm, das Deinen Effekt reproduziert, zippe es ohne obj-, bin- und vs-Verzeichnisse und hänge es an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo RodFromGermany, habe endlich ein kleines Programm draus programmiert

    Anhang entfernt, da unvollständig (Form1.vb und deren Abhängigkeiten fehlen), jedoch mit ausführbarer Datei; letztere ist nicht außerhalb des Showrooms erlaubt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    VBUser77 schrieb:

    die datei
    Was soll ich mit Deiner Exe?
    Das war der Plan:

    RodFromGermany schrieb:

    ein kleines laufendes Testprogramm
    und davon die Quellen.

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sach mal, testest Du Dein gezipptes Projekt überhaupt, bevor Du es hochlädst? Das funktioniert ja schon wieder nicht. Naja, zumindest scheinen jetzt alle Dateien da zu sein, aber die Verknüpfungen im Programm muss man trotzdem einpflegen.
    Falls Du nicht weißt, was ich meine: lad Dein Projekt selber runter, pack es aus uns versuche es zu starten.
    Daher: Vor dem Hochladen Projekten diese nochmal selbst entpacken und testen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo also wenn ich das nicht anders hinkriege dann versuche ich es mal so mit bildern:

    Im ersten bild kann man den quellcode erkennen - im zweiten bild ist das ergebnis in textbox1 erkennbar
    Bilder
    • quellcode.jpg

      294,76 kB, 1.494×1.258, 57 mal angesehen
    • u74i.jpg

      42,75 kB, 397×474, 50 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VBUser77“ ()

    Du nimmst Dein funktionierendes Projekt, schließt Visual Basic (what? VB 2010Express? nawieauchimmer …), löschst im Dateiexplorer den bin- und obj-Ordner und zippst den Rest.
    Zum Problem selbst zitier ich mal Mikrosaft:

    MSDN schrieb:

    Decimal-Datentyp (Visual Basic)
    […]
    der kleinste Nonzero-Wert lautet +/-0,0000000000000000000000000000000000 (+/-1E-28)

    Daher kommt - nachdem ich mal alle Punkte zu Kommas gemacht habe, also 0.00000… -> 0,00000… ein vernünftiger, aber stark gerundeter Wert raus. Eben weil Decimal so kleine Werte nicht verarbeiten kann. Und wieder stellt sich die Frage, was das mit den Nullen soll. Die Darstellung in Gramm pro Mol ist m.E. relativ praxisfern. Es gibt sooo schöne Maßeinheitenvorsätze, die Dir Nullen und somit die Rundungsprobleme ersparen. Aber das hatte @petaod schon erwähnt. Das y für Yokto entfernt 24 von 28 Nullen. Damit wird aus 0,000000000000000000000000000334985499608 g/mol einfach 0,000334985499608 yg/mol. Und damit kann Decimal sehr gut umgehen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VBUser77 Arbeite nicht mit Strings, arbeite mit numerischen Werten:

    VB.NET-Quellcode

    1. Dim value As Decimal = 0.0000000000000000000000000000000000000000000000042
    2. ListBox1.Items.Add(value)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!