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
.