Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server自定义十进制值舍入_Sql_Sql Server_Tsql_Decimal_Rounding - Fatal编程技术网

SQL Server自定义十进制值舍入

SQL Server自定义十进制值舍入,sql,sql-server,tsql,decimal,rounding,Sql,Sql Server,Tsql,Decimal,Rounding,我想对5.457845的十进制值进行四舍五入 如果小数点后的第一位数值大于5,则5.5 如果小数点后的第一位数值小于5,则5.0 例如: 5.457845 = 5.0 5.684575 = 5.5 我认为没有任何本机函数可以实现这一点。试试这个把戏 DECLARE @num NUMERIC(22, 6) = 5.684575 SELECT Floor(@num) + CASE WHEN Round(@num, 1, 1) % 1 <= 0.5 THEN 0 ELSE 0.5 END

我想对
5.457845
的十进制值进行四舍五入

  • 如果小数点后的第一位数值大于
    5
    ,则
    5.5
  • 如果小数点后的第一位数值小于
    5
    ,则
    5.0
例如:

5.457845 = 5.0
5.684575 = 5.5

我认为没有任何本机函数可以实现这一点。试试这个把戏

DECLARE @num NUMERIC(22, 6) = 5.684575

SELECT Floor(@num) + CASE WHEN Round(@num, 1, 1) % 1 <= 0.5 THEN 0 ELSE 0.5 END
这个怎么样:

select floor(5.457845 * 2) / 2  -- returns 5.0
select floor(5.684575 * 2) / 2  -- returns 5.5
select floor(5.0 * 2) / 2       -- corner case 1 - returns 5.0
select floor(5.4999999 * 2) / 2 -- corner case 2 - returns 5.0
select floor(5.5 * 2) / 2       -- corner case 3 - returns 5.5
select floor(5.9999999 * 2) / 2 -- corner case 4 - returns 5.5
请注意,这对于负数可能不太有效:

select floor(-5.0 * 2) / 2       -- corner case 5 - returns -5.0
select floor(-5.4999999 * 2) / 2 -- corner case 6 - returns -5.5
select floor(-5.5 * 2) / 2       -- corner case 7 - returns -5.5
select floor(-5.9999999 * 2) / 2 -- corner case 8 - returns -6.0

这是可行的,但它显示的结果是5.500000,但我想要的正好是5.5抱歉,请尝试这样的
选择convert(十进制(9,1),floor(5.457845*2)/2)
。但通常情况下,查询的输出数字看起来是什么并不重要,因为在可能的情况下,您应该在UI层(而不是在这里)进行格式化,以确保可读性。
select floor(-5.0 * 2) / 2       -- corner case 5 - returns -5.0
select floor(-5.4999999 * 2) / 2 -- corner case 6 - returns -5.5
select floor(-5.5 * 2) / 2       -- corner case 7 - returns -5.5
select floor(-5.9999999 * 2) / 2 -- corner case 8 - returns -6.0