我阅读了 T-SQL 的所有舍入函数,例如 Round
、Floor
和 Ceil
,但它们都没有对十进制数字进行舍入对我来说正确。
我有 2 个问题:
- 如何向下舍入小数 (
3.69
==>3.5
)? - 如何对整数的最后 3 位进行四舍五入(例如
142600
==>143000
)?
最佳答案
1) select CAST(FLOOR(2 * 3.69)/2 ASdecimal(2, 1))
处理第一种情况 - 由 answer to a similar question on SQL Server Forums 提供,我对其进行了调整并快速检查。
请注意,如果您舍入到最接近的 0.5
的数字可能更大(例如 333.69
=> 333.5
),请务必在转换时指定更多的 decimal
精度(例如 select CAST(FLOOR(2 * 3.69)/2 ASdecimal(10, 1))
),否则可能会出现溢出错误:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
额外的精度不会影响底线结果(即 select CAST(FLOOR(2 * 3.69)/2 ASdecimal(10, 1))
和 select CAST(FLOOR( 2 * 3.69)/2 ASdecimal(2, 1))
均产生 3.5
);但如果四舍五入的数字总是较小,那就太浪费了。
可提供 T-SQL 的在线引用和示例 FLOOR
, CAST
,和decimal
来帮忙。
2) select ROUND(142600, -3)
处理第二种情况。
类似的在线引用可用于 T-SQL ROUND
.
关于sql-server - SQL Server 2008 中的小数舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072136/