2016-04-04 14 views
0

Ich versuche, eine Berechnung von C# zu TSQL zu migrieren und habe einige Schwierigkeiten, das erforderliche Maß an Genauigkeit zu erreichen. Ein Beispiel für die Formel mit einigen eingesteckt problematischen Variablen in ist dies:Erhöhen Sie die Genauigkeit des Ergebnisses einer Formel in TSQL

(6.4 + (10 - 6.4) * 0.5) * 0.75

Als ich dies in C# ausführen ich das Ergebnis 6.1499999999999995 bekommen. Wenn ich dies jedoch in TSQL auswähle, wird es auf 6.1500 gerundet.

Gibt es eine Möglichkeit, die höhere Genauigkeit in TSQL zu erreichen?

+0

Ich denke, die Antwort von SQL Server ist korrekt. –

+0

Ich gebe das gerne zu. Das Problem ist, dass die von mir implementierte Berechnung das C# -Stil-Ergebnis benötigt. – fyodorfranz

+0

Was ist Ihr Datentyp in C#? Wenn Sie float in C# verwenden, ist das nicht korrekt. benutze immer dezimal. BTW, es gibt keine Division (/) in Ihrer Aussage, also warum Sie denken, dass 6.149999999 korrekt ist ?! – FLICKER

Antwort

0

können Sie ein tun

CAST(X AS DECIMAL(y,s)) 

wobei X die Spalte und y ist die Präzision. 38 ist die maximale Voreinstellung, die Sie verwenden können. s ist die Anzahl der Werte rechts vom Dezimalpunkt.

https://msdn.microsoft.com/en-us/library/ms187746(v=sql.120).aspx

+0

Danke für den Vorschlag. Weißt du, wie ich das verwenden könnte, um das Ergebnis zu bekommen, nach dem ich suche? Ich habe versucht, jede einzelne Variable auf eine Dezimalzahl zu übertragen, und das hat nicht funktioniert. Auch der einfachere Ansatz 'SELECT CAST (((6.4 + (10 - 6.4) * 0.5) * 0.75) AS DECIMAL (38, 37))' – fyodorfranz

+0

Ich bin nicht in der Lage, atm zu testen, aber ich habe gerade den zweiten Parameter hinzugefügt meine Antwort, die die Anzahl der Werte rechts vom Dezimalpunkt definiert. Können Sie versuchen, den ersten Wert mit einem Wert von s zu konvertieren, den Sie möchten? Ich denke, das sollte die gesamte Aussage zu einer Dezimalzahl machen. – timcbaoth

+0

Ich habe versucht, die ganze Formel mit der zweiten hinzugefügten Variable ('DECIMAL (38,37)') zu übertragen. Wenn Sie sagen "Können Sie versuchen, den ersten Wert zu werfen" meinst du nur 6,4? – fyodorfranz

Verwandte Themen