我读了T-sql的所有舍入函数,如Round,Floor和Ceil,但它们都没有正确地向下舍入十进制数.
我有两个问题:
>如何舍入十进制数(3.69 ==> 3.5)?
>如何舍入整数的最后3位数(例如142600 ==> 143000)?
解决方法
1)选择CAST(FLOOR(2 * 3.69)/ 2 AS十进制(2,1))处理第一个案例 – 由
answer to a similar question on SQL Server Forums提供,我对其进行了调整并快速检查.
请注意,如果您舍入到最接近的0.5的数字可能更大(例如333.69 => 333.5),请确保在转换时指定更多小数精度(例如,选择CAST(FLOOR(2 * 3.69)/ 2 AS十进制( 10,1))),或者你可能会收到溢出错误:
Msg 8115,Level 16,State 8,Line 1 Arithmetic overflow error converting numeric to data type numeric.
额外的精度不会影响底线结果(即选择CAST(FLOOR(2 * 3.69)/ 2 AS十进制(10,1))并选择CAST(FLOOR(2 * 3.69)/ 2 AS十进制(2,1) )两者产量3.5);但如果你要四舍五入的数字总是更小,那就太浪费了.
有关示例的在线参考可用于T-sql FLOOR
,CAST
和decimal
以提供帮助.
2)选择ROUND(142600,-3)处理第二种情况.