Sql server SQL Server 2008中的小数舍入

Sql server SQL Server 2008中的小数舍入,sql-server,tsql,rounding,Sql Server,Tsql,Rounding,我阅读了T-SQL的所有舍入函数,如Round、Floor、和Ceil,但没有一个函数能为我正确舍入十进制数 我有两个问题: 如何舍入十进制数(3.69==>3.5) 如何将整数的最后3位四舍五入(例如142600==>143000) 1)选择CAST(FLOOR(2*3.69)/2作为十进制数(2,1))处理第一个案例-由an提供,我对其进行了调整并快速检查 请注意,如果四舍五入到最接近的0.5的数字可能更大(例如333.69=>333.5),请确保在进行转换时指定更多的decimal精度(例

我阅读了T-SQL的所有舍入函数,如
Round
Floor
、和
Ceil
,但没有一个函数能为我正确舍入十进制数

我有两个问题:

  • 如何舍入十进制数(
    3.69
    ==>
    3.5
  • 如何将整数的最后3位四舍五入(例如
    142600
    ==>
    143000
  • 1)
    选择CAST(FLOOR(2*3.69)/2作为十进制数(2,1))
    处理第一个案例-由an提供,我对其进行了调整并快速检查

    请注意,如果四舍五入到最接近的
    0.5
    的数字可能更大(例如
    333.69
    =>
    333.5
    ),请确保在进行转换时指定更多的
    decimal
    精度(例如
    选择转换(地板(2*3.69)/2作为十进制(10,1))
    ,否则可能会出现溢出错误:

    Msg 8115, Level 16, State 8, Line 1
    Arithmetic overflow error converting numeric to data type numeric.
    
    额外的精度不会影响底线结果(即
    选择CAST(楼层(2*3.69)/2作为小数点(10,1))
    选择CAST(楼层(2*3.69)/2作为小数点(2,1))
    两种产量
    3.5
    ;但如果四舍五入的数字总是更小,那就是浪费

    T-SQL的在线参考和示例可供使用,并可提供帮助

    2)
    选择圆形(142600,-3)
    处理第二种情况

    T-SQL也有类似的在线参考。

    1)
    选择CAST(FLOOR(2*3.69)/2作为十进制(2,1))
    处理第一个案例,这是由我改编并快速检查的

    请注意,如果四舍五入到最接近的
    0.5
    的数字可能更大(例如
    333.69
    =>
    333.5
    ),请确保在进行转换时指定更多的
    decimal
    精度(例如
    选择转换(地板(2*3.69)/2作为十进制(10,1))
    ,否则可能会出现溢出错误:

    Msg 8115, Level 16, State 8, Line 1
    Arithmetic overflow error converting numeric to data type numeric.
    
    额外的精度不会影响底线结果(即
    选择CAST(楼层(2*3.69)/2作为小数点(10,1))
    选择CAST(楼层(2*3.69)/2作为小数点(2,1))
    两种产量
    3.5
    ;但如果四舍五入的数字总是更小,那就是浪费

    T-SQL的在线参考和示例可供使用,并可提供帮助

    2)
    选择圆形(142600,-3)
    处理第二种情况


    T-SQL也有类似的在线参考。

    根据@J0e3gan的anwser,允许使用
    长度
    参数四舍五入到最接近的10次方,其中长度为
    10^(-length)
    ,例如

    length = 0 : 10 ^ 0 = nearest 1
    length = 3 : 10 ^ -3 = nearest .001
    length = -3 : 10 ^ 3 = nearest 1000
    

    但是,一般来说,使用一个简单的基于1的舍入函数(例如(长度为0的Sql舍入)舍入到任意的“最近的N”值,公式如下:

    round(X / N) * N
    
    e、 g.最近的100

    select round(12345 / 100.0, 0) * 100.0 -- 12300
    select round(-9876 / 100.0, 0) * 100.0 -- -9900
    select round(-9849 / 100.0, 0) * 100.0 -- -9800
    
    。。。最接近0.5

    select round(5.123 / 0.5, 0) * 0.5 -- 5.000
    select round(6.499 / 0.5, 0) * 0.5 -- 6.500
    select round(-4.499 / 0.5, 0) * 0.5 -- -4.50
    
    。。。最接近0.02

    select round(5.123 / .02, 0) * .02 -- 5.12
    select round(-9.871 / .02, 0) * .02 -- -9.88
    


    请记住,用于除数的类型必须是数字/十进制或浮点。

    根据@J0e3gan的anwser,允许使用
    length
    参数四舍五入到最接近的10次方,其中length为
    10^(-length)
    ,例如

    length = 0 : 10 ^ 0 = nearest 1
    length = 3 : 10 ^ -3 = nearest .001
    length = -3 : 10 ^ 3 = nearest 1000
    

    但是,一般来说,使用一个简单的基于1的舍入函数(例如(长度为0的Sql舍入)舍入到任意的“最近的N”值,公式如下:

    round(X / N) * N
    
    e、 g.最近的100

    select round(12345 / 100.0, 0) * 100.0 -- 12300
    select round(-9876 / 100.0, 0) * 100.0 -- -9900
    select round(-9849 / 100.0, 0) * 100.0 -- -9800
    
    。。。最接近0.5

    select round(5.123 / 0.5, 0) * 0.5 -- 5.000
    select round(6.499 / 0.5, 0) * 0.5 -- 6.500
    select round(-4.499 / 0.5, 0) * 0.5 -- -4.50
    
    。。。最接近0.02

    select round(5.123 / .02, 0) * .02 -- 5.12
    select round(-9.871 / .02, 0) * .02 -- -9.88
    


    请记住,用于除数的类型必须是数字/十进制或浮点。

    Oracle/PLSQL
    FLOOR
    函数返回等于或小于一个数字的最大整数值。 例如:


    Oracle/PLSQL
    FLOOR
    函数返回等于或小于一个数字的最大整数值。 例如:


    你应该写自定义项。你应该写自定义项。谢谢J0e3gan。它工作正常!谢谢J0e3gan。它工作正常!