Warum C # -Rund- und SQL-Runden-Funktionen ergeben unterschiedliche Ausgänge?

8

Ich verwende ROUND -Funktion aus C # und SQL, und überraschenderweise ergeben beide unterschiedliche Ergebnisse.

In SQL: ROUND(1250.00, -2) = 1300

In C # ROUND 1250 mit Runde und precision = 2 = 1200

Ist schon einmal jemand auf diese Situation gestoßen?

    
Vijay Balkawade 22.11.2011, 05:16
quelle

4 Antworten

7

C # verwendet standardmäßig die Banker-Rundung. Wenn Sie genau auf der Markierung .5 sind, wird auf die nächste gerade Zahl gerundet, anstatt immer aufzurunden.

Im Abschnitt zu den Anmerkungen im Artikel wird dieses Verhalten beschrieben. Im Grunde ist es um Rundungsfehler zu reduzieren, wenn Sie viele gerundete Zahlen zusammen akkumulieren.

    
Tanzelax 22.11.2011, 05:19
quelle
3

Wenn Sie Ссылка lesen, sehen Sie, dass die Standardrundung "rund" ist sogar "(Banker's Rundung) wo als SQL Server scheint "Standard" -Rundung zu verwenden

SQL Server aktualisieren Führt entweder eine symmetrische arithmetische Rundung oder eine symmetrische Abrundung (Fix) durch, je nach Argument

So lösen Sie das Problem: Implementieren Sie eine benutzerdefinierte Rundungsprozedur: Ссылка

    
Baz1nga 22.11.2011 05:24
quelle
1

Der schwierige Teil in der Rundung ist, was man mit Dezimalzahlen macht. Sie sind eigentlich genau auf halbem Wege, also bilden sie eine Krawatte. Es gibt ein gutes Stück über tiebreaking im Rundungsartikel von Wikipedia. Im Wesentlichen verwendet C # die Banker-Rundung, die abgerundet wird, wenn die letzte ungerundete Ziffer gerade ist, und aufwärts, wenn sie ungerade ist. Dies entspricht dem IEEE-Standard. SQL folgt stattdessen der Regel "immer rund 5".

    
Keith Irwin 22.11.2011 05:23
quelle
0

Verwenden Sie den Parameter in Math.Round, MidpointRounding , um anzugeben, wie Ihre Zahlen gerundet werden sollen.

%Vor%

Sie können es auf diese Weise verwenden:

%Vor%     
AgentFire 22.11.2011 05:20
quelle

Tags und Links