MySQL oder wer rundet automatisch, warum?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Frettchen1982.

    MySQL oder wer rundet automatisch, warum?

    Hallo Leute,

    dreh gleich durch.

    Habe eine String mit dem Inhalt: "1.333"

    Wenn ich nun versuche mit Decimal.Parse(String) das ganze zu konvertieren und in eine neue Zeile in der Binding source schreibe wird nach dem speichern in der DB einfach der . weggelassen und ich habe 1333 in der DB.

    Mach ich Decimal.Parse(String.Replace(".",",")), kommt in der DB eine 1 an.

    Lass ich mir das vorher in einer Messagebox anzeigen, habe ich noch 1,333.

    Jemand noch ne idee?


    EDIT:

    DB, Dataset und haben alle den Typ DECIMAL.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Frettchen1982“ () aus folgendem Grund: Fehler im angegebenen Code. Replace(".",",") statt (".",".")

    Hast du bei der DB spalte vielleicht "Int" anstatt "Float" bzw. "Double" angeben? Dann ist es klar denn ein Integer ist eine Ganzzahl
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein

    ErfinderDesRades schrieb:


    noch besser ists, von vornherein die richtigen Datentypen zu nehmen.
    Warum ist dein "1.333" ein String, warum ist das nicht gleich 1.333D, nämlich ein Decimal?
    Kommt so aus der XML der Zentralbank...

    ~blaze~ schrieb:


    Hi
    täuscht es oder ersetzt du Punkt mit Punkt? Übrigens ist es sinnvoller, bei Decimal.Parse die Kultur als CultureInfo.Invariant zu übergeben.

    Ist korrigiert im Eingangspost. Danke für Aufmerksamkeit.


    VB.NET-Quellcode

    1. Decimal.Parse("1.2", System.Globalization.CultureInfo.Invariant)


    Werde ich nachher mal testen...

    Schon mal Danke an alle.
    So, ich habe getestet.

    Problem war aber das selbe, aber ich habe es nun anders lösen können.

    Zuerst: Ich habe meine DB mit der normalen MySQL Worckbench gestaltet. Alle darin enthaltenen Spalten die für Geldbeträge gedacht sind habe ich einfach mit DECIMAL versehen. Ich dachte auch, dass bisher auch alle Werte aus DataGridViews, in die man Geldbeträge eingibt das richtig machen. Pustekuchen. Überall landen gerundete Zahlen.

    Nun habe ich z.B. die Spalte für o.g. Werte so in der DB angelegt: DECIMAL(10,3)

    Dann geht es. Auch mit meinem .replace.

    Wusste ich nicht, dass ich die Dezimalstellen vorgeben muss in der DB. Hatt vorher alles mit only DataSet gemacht, da ging das ja ohne Probleme.
    Die EZB stellt täglich die Vortagskurse bereit... Aber das ist nicht das Problem.

    Ich habe ein Typisiertes Dataset und verwende deine DBExtensions. Sind übrigens toll.

    Mir ist aber nun etwas weiters aufgefallen. Und zwar habe ich in der MySQL DB eine Splate Preis. So, die ist angelegt als DECIMAL. Die MySQL is ein Abbild meines DataSet. Mit Beziehung und allem drum und dran.

    Nun habe ich z.B. eine Tabelle mit BindingSource an eine DataGridView gebunden. Darin enthalten eine Spalte "Preis". Gebe ich da z.B. 5,55 ein, also im DGV und mach Dataset.Save(Me) kommt in der DB 6 an. Die Splate is in der DB und im Dataset mit DECIMAL angelegt.

    Leg ich die Spalte in der DB z.B. mit DECIMAL(10,2) an, geht es.
    Sieht fast so aus. Hatte anfangs mal Double drin und habe es eben nochmal damit getestet. Da nimmt die DB es wie es kommt. Also egal wie viele stellen. Habe das Thema mal als erledigt markiert, aber wenn noch jemand was daszu Erkären möchte oder ich hier in den irrtum laufe. Her damit :)