Announcement

Collapse
No announcement yet.

MS SQL Rundung falsch

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

  • MS SQL Rundung falsch

    Hallo,

    ich habe ein sehr seltsames Problem.
    Der Wert einer Spalte a ist 1,235. Mittels select round(a,2) wollte ich diese Spalte runden (also 1,24), allerdings erscheint als Ergebnis der Abfrage immer 1,23 (also nur abgeschnitten).
    Der Wert 1,235 wird korrekt auf 1,24 gerundet.
    Ebenso wird der Wert, 1,235001 auf 1,24 gerundet.

    Ich verwende MS SQL 2005.

    Mit was kann das zu tun haben?

    gruss
    u.

  • #2
    Hallo,
    Originally posted by u30239902 View Post
    ...Der Wert einer Spalte a ist 1,235. ... allerdings erscheint als Ergebnis der Abfrage immer 1,23 (also nur abgeschnitten).
    Originally posted by u30239902 View Post
    ...Der Wert 1,235 wird korrekt auf 1,24 gerundet.
    Ja was nun? Korrekt oder nicht?
    Steht in der Tabelle wirklich ein 1,235 oder sowas wie 1,234999999998?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,
      Das habe ich mich jetzt vertippt, tut mir leid.
      Folgendes wird gerundet:

      1.236 => 1.24
      1.235 => 1.23
      1.235001 => 1.24

      >Steht in der Tabelle wirklich ein 1,235 oder sowas wie 1,234999999998?

      Das ist eine Summe, die ungerundet: 1.235 ist.

      Gruß
      u.

      Comment


      • #4
        Das ist eine Summe, die ungerundet: 1.235 ist.
        Was für ein Spaltentyp. Float? Dann ist das eher ein Schätzwert (innerhalb der Grenzen der Darstellungsgenauigkeit von Dezimalwerten im Binärsystem) und nicht genau. Auch wenn du 1.235 angezeigt bekommst ist das binär nicht zwingend dieser Wert der echte (binäre Wert) läßt sich im Dezimalsystem nur einfach nicht genauer darstellen. Wenn du genaue(re) Operationen an dieser Stelle brauchst dann solltest du den Decimal (oder Money, SmallMoney) Datentyp nehmen.

        Beispiel:

        [Highlight=SQL]select cast(0.13 as float) + cast(1.105 as float) as FloatValue,
        cast(0.13 as decimal(4,3)) + cast(1.105 as decimal(4,3)) as DecimalValue,
        round(cast(0.13 as float) + cast(1.105 as float), 2) as RoundedFloatValue,
        round(cast(0.13 as decimal(4,3)) + cast(1.105 as decimal(4,3)), 2) as RoundedDecimalValue[/Highlight]

        Ergebnis

        Code:
        FloatWert              FloatWert                               RoundedFloatWert       RoundedDecimalWert
        ---------------------- --------------------------------------- ---------------------- ---------------------------------------
        1,235                  1.235                                   1,23                   1.240

        Comment

        Working...
        X