SQL Server 2008:为啥不四舍五入到小数点后两位?
Posted
技术标签:
【中文标题】SQL Server 2008:为啥不四舍五入到小数点后两位?【英文标题】:SQL Server 2008: Why won't this round to two decimal places?SQL Server 2008:为什么不四舍五入到小数点后两位? 【发布时间】:2011-02-07 19:33:25 【问题描述】:SELECT
ROUND(WeightInOZ / 16, 2)as WeightInLbs
FROM
Inventory
我得到的结果看起来像一个整数 1,2 等
【问题讨论】:
WeightInOZ
的数据类型是什么?
它是一个 int,但我认为这并不重要,因为我对结果进行了修改
可能重复(没有票数?!?):***.com/questions/44046/…
@OMG:我不认为这是重复的(尽管如果 SO 上没有重复我会感到惊讶,考虑到这是一个很常见的错误......我没有不过麻烦看)
@Adam Robinson:OP cmets 建议使用截断进行舍入,这是链接提供的。
【参考方案1】:
尝试将 16 更改为 16.0
SELECT
ROUND(WeightInOZ / 16.0, 2)as WeightInLbs
FROM
Inventory
您看到了奇怪的结果,因为它将除法的结果视为整数而不是小数。指定 .0
告诉 sql server 将其视为小数。
更新:
如果尾随的零吓坏了你,你可以随时这样做:
SELECT
CAST(ROUND(WeightInOZ / 16.0, 2) AS NUMERIC(8,2)) as WeightInLbs
FROM
Inventory
【讨论】:
这将给我这个结果:0.060000 这是正确轨道上的定义 嗯,你期待什么结果? 我期待 0.06 或 233.23 等 我知道这看起来很奇怪,但它们是相同的数字。如果您不喜欢看到尾随零,您可以使用我的更新中描述的方法。 哦,我明白了,这很聪明【参考方案2】:问题是这样的:
WeightInOZ / 16
由于您要处理两个整数,SQL Server 会截断余数,因此没有小数部分可以舍入。
您想要做的是强制它执行浮点(或十进制)除法。最简单的方法是将16
更改为16.0
。
SELECT
ROUND(WeightInOZ / 16.0, 2)as WeightInLbs
FROM
Inventory
【讨论】:
@Nicholas:您评论的第一部分是否丢失了?以上是关于SQL Server 2008:为啥不四舍五入到小数点后两位?的主要内容,如果未能解决你的问题,请参考以下文章
为啥安装sql Server 2008时总是显示windows powershell错误?
为啥我的SQL Server 2008把数据库分离出来后就附加不进去了呢?
为啥安装的SQL SERVER 2008中SQL SERVER 服务只有1个
为啥 SQL Server Management Studio 2008 的服务器类型列表中缺少 SQL Server Compact Edition?