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?
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
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: Ссылка
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".
Tags und Links sql-server c# number-rounding