2016-06-14 12 views
0

Ich brauche den Ausgang mit 2-stellig wie 2.39, aber ich habe den Ausgang 2.3980815347721822541966. Was ist das Problem, das ich nicht verstehen kann. Hier ist meine Abfrage.Warum meine Ausgabe ist 2.3980815347721822541966 statt 2.39

SELECT M.Description,A.Target,A.Actual, 
    CASE 
    WHEN A.Target > 0 THEN A.Actual/CONVERT(DECIMAL(18,2),A.Target) 
    ELSE 0 
    END Achievement 
FROM (
    SELECT * FROM ProcessData PD 
    WHERE 
    ProcessYear = 2015 AND ProcessMonth = 1 
    AND DepotID = 6 AND ModuleID =1 
) A 
LEFT OUTER JOIN Measure M 
    ON M.ID = A.MeasureID 
+0

Welches RDBMS und was ist der Datentyp von A.Actual? Was haben Sie in der Dokumentation des RDBMS über Datentypkonvertierung und arithmetische Logik gefunden? Beim nächsten Mal bitte zeigen Sie etwas Aufwand und formatieren Sie Ihre Frage, damit wir Ihnen helfen können! – Pred

+5

Mögliches Duplikat von [Ist Fließkomma-Mathematik gebrochen?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

+0

Welche Art der Konvertierung muss ich die Ausgabe in zwei Ziffern machen? – user3510330

Antwort

1

Sie müssen vielmehr den gesamten Ausdruck zu formatieren, als nur den Divisor:

Also anstatt

THEN A.Actual/CONVERT(DECIMAL(18,2),A.Target) 

Ändern Sie es an:

THEN CONVERT(DECIMAL(18,2), A.Actual/A.Target) 

Bitte beachte, dass ich erwarten würde 2.398 um auf 2.40 zu runden (was der Code ist, den ich gepostet habe) - bist du sicher, dass du alwa abrunden willst? Ja? Wenn ja, schauen Sie sich auch die ROUND-Funktion an.

THEN CONVERT(DECIMAL(18,2), ROUND(A.Actual/A.Target, 2, 1) 
+0

Danke. Es funktioniert. – user3510330

Verwandte Themen