Announcement

Collapse
No announcement yet.

Exception: Die arithmetische Operation hat einen Überlauf verursacht.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exception: Die arithmetische Operation hat einen Überlauf verursacht.

    Hallo,

    ich bekomme Daten von einem externen Partner über ein Dateihandling.
    Ich speichere den wert erst in ein double ab und prüfe dann ob es in int64 passt:
    Code:
      void getwert( double ex_wert)
    {
        if ((Int64.MinValue <= ex_wert) && (ex_wert <= Int64.MaxValue))
           m_WertInt64 = Convert.ToInt64(ex_wert);
    }
    Anmerkung m_WertInt64 ist Klassenvariable von Int64.

    Ist nun der ex_wert = Int64.MaxValue, so erhalte ich die obige Exeption bei
    Convert.ToInt64(ex_wert). Warum ?

    M.H

  • #2
    Vielleicht ist es nicht genau MaxValue, sonder ein klein wenig mehr und schon bekommst Du einen Überlauf. Hast Du die Werte schon exakt verglichen? Vielleicht kannst Du auch mal Beispielwerte geben.

    Comment


    • #3
      Der Wert beträgt 9223372036854775806 Impulse, dabei kommt die Exception.

      M.H.

      Comment


      • #4
        Der Konvertierungsalgorithmus scheint an den Zahlengrenzen nicht so wirklich gut zu sein. Der ist leider nativ und konnte mir den Interesse weise gerade nicht ansehen.

        Code:
        Int64 a = Convert.ToInt64((double)(Int64.MaxValue - 512)); // knallt nicht
        Int64 b = Convert.ToInt64((double)(Int64.MaxValue - 511)); // knallt
        Du solltest in deinem if die Obergrenze also etwas früher greifen lassen. Ich bin mir aber nicht sicher ob die konstant ist. Könnte mir vorstellen das der Algorithmus auf einem 32bit System dort leicht anders reagiert als auf einem 64bit System.

        Comment


        • #5
          Ist das auch der Wert der aus deinem double kommt? Oder der der im File drin steht? Vielleicht liegts an der Konvertierung in double wenn Du die Zahl aus einem Textfile liest.

          Comment

          Working...
          X