【问题标题】:How to round a number upto n decimal places in sql server如何在sql server中将一个数字四舍五入到小数点后n位
【发布时间】:2015-08-02 20:12:18
【问题描述】:

我在表中有列,我想将其四舍五入到小数位。 它存储在其他表中。

实际上我的数据存储为小数点后 8 位,但根据用户偏好,我需要显示到小数点后。

列数据类型是数字(19,8)

我有一个返回所有行的程序。所以当时我只想将我的列四舍五入到指定的十进制小数

想做类似的事情

declare @i int = 2
Begin
select cast (12533333.193 as numeric(38,@i))
end

如何做到这一点? 请推荐

【问题讨论】:

  • 给我们一些样本数据来试一试,也许还有一些列定义
  • 存入另一个表时会进行舍入。在插入/更新之前不需要做任何明确的事情。
  • @JeremyC。更新了原来的问题
  • @jarlh 查看我的场景。在帖子中更新
  • 你的数据在数据库中保存在什么类型的字段中?

标签: sql sql-server rounding


【解决方案1】:

你可以只使用 sql-server 的 ROUND 函数

DECLARE @i int = 2
BEGIN
SELECT ROUND(val,@i)
FROM mytable
END

SQLFIDDLE

【讨论】:

  • Round(125.2369,2) 会给我 125.2300- 这不是我想要的
【解决方案2】:

您可以在查询中四舍五入后转换为小数点后 2 位的数字,

或当您在报表或系统中显示时

DECLARE @i int = 2
BEGIN
SELECT 
cast(
    ROUND(val,@i)
    as decimal(10,2)
)
FROM mytable
END

【讨论】:

  • 我不知道我需要转换多少位小数。你不能做十进制(10,@i)
【解决方案3】:

这是最简单的

在开始之前,我想告诉您这仅适用于浮点类型(是的!您需要将小数/数字转换为浮点数!)。在语法方面,它也是可读性最高的

select round(cast(65.456 as float),2) (这将四舍五入到小数点后 2 位)

select round(cast(65.456 as float),1) (这将四舍五入到小数点后 1 位)

select round(cast(65.456 as float),0) (这将四舍五入到小数点后 0 位)

请看下面的截图

【讨论】:

  • float 不是一个精确的类型,当你使用它时你可能会遇到令人讨厌的惊喜。考虑改用小数。
  • 这不适用于十进制作为值类型。只有当我们将类型转换为 float 时,它才会处理预期的小数点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2010-09-14
相关资源
最近更新 更多