SQL中的舍入函数删除.00

时间:2015-07-17 05:38:57

标签: sql sql-server

我希望将小数点后2位的任何浮点值舍入,而小数位后有值,如果小数点后没有像(.00)这样的值,则不会显示.00

请参阅此代码

  Declare @num float
  Set @num = 123.23252
  --1. Result 123.23
  select CAST(ROUND(@num,2) as numeric(18,2))
  Set @num = 253.000012
  --2. Result 253.00
  select CAST(ROUND(@num,2) as numeric(18,2))

我需要第一个结果是好的,但在第二个结果我只想要253(不包括.00)。这两个功能我想要是相同的功能或方法,因为我们不确切知道@num何时有123.23或253.000012。

请告诉我简单优化的解决方案。

3 个答案:

答案 0 :(得分:0)

试试这个:

Declare @num float
  Set @num = 123.23252
  --1. Result 123.23
  select CAST(ROUND(@num,2) as numeric(18,2))
  Set @num = 253.000012
  --2. Result 253.00

像这样的用例:

    select 
    CASE 
        WHEN RIGHT(CAST(ROUND(@num,2) as numeric(18,2)),2)='00' THEN ROUND(@num,2) 
        ELSE CAST(ROUND(@num,2) as numeric(18,2)) 
    END

或者将IFF用于SQL Server 2012:

 select IFF(RIGHT(CAST(ROUND(@num,2) as numeric(18,2)),2)='00'
      , ROUND(@num,2), CAST(ROUND(@num,2) as numeric(18,2)) 

答案 1 :(得分:0)

您可以使用Format执行此操作(SQL SERVER 2012 +)

    Set @num = 253.000012
  select FORMAT(CAST(ROUND(@num,2) as numeric(18,2)) , 'g15')
    --3. Result 253.00

        Set @num = 253.3000012
  select FORMAT(CAST(ROUND(@num,2) as numeric(18,2)) , 'g15')
    --4. Result 253.3

答案 2 :(得分:0)

数据的呈现应该由客户端完成,而不是由数据库完成,但如果你坚持,只需将浮点数圈起来并将其保持为浮点数:

declare @num1 float = 123.23252;
declare @num2 float = 253.000012;

select ROUND(@num1,2), ROUND(@num2,2)

<强>结果

123.23  253