1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) behandelt het eerste geval - met dank aan een antwoord op een vergelijkbare vraag op SQL Server-forums
, die ik heb aangepast en snel heb gecontroleerd.
Houd er rekening mee dat als de getallen die u aan het afronden bent naar de dichtstbijzijnde 0.5 kan groter zijn (bijv. 333.69 => 333.5 ), zorg ervoor dat u meer decimal opgeeft precisie wanneer u cast (bijv. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), of u kunt een overloopfout krijgen:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
Extra precisie heeft geen invloed op het eindresultaat (d.w.z. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) en select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) beide leveren 3.5 op ); maar het is zonde als de getallen die je afrondt altijd kleiner zijn.
Online referenties met voorbeelden zijn beschikbaar voor T-SQL FLOOR
, CAST
, en decimal
om te helpen.
2) select ROUND(142600, -3) behandelt de tweede zaak.
Een vergelijkbare online referentie is beschikbaar voor T-SQL ROUND
.