SQL - 舍入到2个小数位

use*_*523 211 sql rounding

我需要将分钟转换为小时,舍入到2位小数.我还需要在小数点后最多显示2个数字.所以如果我的分钟为650.那么小时应该是10.83

这是我到目前为止所拥有的:

Select round(Minutes/60.0,2) from ....
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,如果我的分钟是630小时,那么我的分钟数是10万.但我只希望它为10.50(在四舍五入后).我该如何实现这一目标?

u07*_*7ch 366

你能不把你的结果投到numeric(x,2)?哪里x <= 38

select 
    round(630/60.0,2), 
    cast(round(630/60.0,2) as numeric(36,2))
Run Code Online (Sandbox Code Playgroud)

返回

10.500000   10.50
Run Code Online (Sandbox Code Playgroud)

  • @Ram问题没有指定sql server引擎 - 这就是为什么我自己突出显示了圆形v cast.转换为数字不会在所有引擎中进行舍入,因此如果计算出的数字为10.809,则需要10.80而不是10.81. (15认同)
  • 奇怪.`SELECT ROUND(630/60.0,2);`给了我'10.50`. (8认同)
  • `cast(630/60.0 as numeric(36,2))`是enougth`10,50` (8认同)
  • @ u07ch当你已经使用了一个演员表时使用round()的目的是什么? (4认同)
  • 在 ms sql `cast (150.755555 as numeric (16,2));` 中给出 `150.76` (2认同)

Mat*_*ten 74

与SQL Server 2012一样,您可以使用内置格式功能:

SELECT FORMAT(Minutes/60.0, 'N2')
Run Code Online (Sandbox Code Playgroud)

(仅供进一步阅读...)

  • 使用'0.00'而不是'N2'给出两个小数位,而没有千位分隔符. (9认同)
  • 请注意,这也会引入数千个分隔符,例如`1,757.47` (2认同)
  • 似乎转换为字符串?拧紧顺序。 (2认同)
  • @blissweb 应该不成问题,因为您可以对原始列进行排序,而不是 Format 函数的输出。 (2认同)

Ram*_*Ram 23

您可以使用

select cast((630/60.0) as  decimal(16,2))
Run Code Online (Sandbox Code Playgroud)


小智 12

Declare @number float = 35.44987665;
Select round(@number,2) 
Run Code Online (Sandbox Code Playgroud)

  • 考虑为您的答案添加一些解释. (4认同)
  • 在十进制(10,6)的情况下会发生什么? (3认同)
  • 在 MS SQL Server 中,这将产生所讨论的确切问题。输出将为 35.44000000 (3认同)

Kni*_*ins 6

将您的数字转换为NumericDecimal

\n

将您的查询替换为以下内容。

\n

SQL\xc2\xa0Server

\n
Select Convert(Numeric(38, 2), Minutes/60.0) from ....\n
Run Code Online (Sandbox Code Playgroud)\n

MySQL

\n
Select Convert(Minutes/60.0, Decimal(65, 2)) from ....\n
Run Code Online (Sandbox Code Playgroud)\n

Cast函数是该函数的包装器Convert。再加上 SQL 是一种解释性语言,结果是,即使两个函数产生相同的结果,函数的幕后还有更多的事情发生Cast

\n

使用该Convert功能可以节省少量资金,但小额节省会成倍增加。Numeric 和 Decimal (38, 2) 和 (65, 2) 的参数表示要使用的最大精度级别和小数位数。

\n


小智 5

CAST(QuantityLevel AS NUMERIC(18,2))
Run Code Online (Sandbox Code Playgroud)

  • 欢迎使用Stack Overflow!感谢您提供的代码段,它们可能会提供一些有限的即时帮助。通过描述为什么这是一个很好的解决方案,对它的长期价值进行适当的解释将极大地改善其[长期价值](https://meta.stackexchange.com/q/114762/206345),并将使其对未来更加有用有其他类似问题的读者。请编辑您的答案以添加一些解释,包括您所做的假设。 (2认同)