SQL Server 2008:为什么这轮不能到两位小数?

Wil*_*iam 3 sql t-sql sql-server rounding sql-server-2008

SELECT
   ROUND(WeightInOZ / 16, 2)as WeightInLbs
FROM
   Inventory
Run Code Online (Sandbox Code Playgroud)

我得到的结果看起来像整数1,2等

Abe*_*ler 8

尝试将16更改为16.0

SELECT
   ROUND(WeightInOZ / 16.0, 2)as WeightInLbs
FROM
   Inventory
Run Code Online (Sandbox Code Playgroud)

您看到奇怪的结果,因为它将您的除法结果视为整数而不是小数.指定.0tell sql server将其视为小数.

更新:

如果尾随的零件吓到了你,你可以随时这样做:

SELECT
   CAST(ROUND(WeightInOZ / 16.0, 2) AS NUMERIC(8,2)) as WeightInLbs
FROM
   Inventory
Run Code Online (Sandbox Code Playgroud)

  • 嗯,你期待什么结果? (2认同)

Ada*_*son 5

问题是这样的:

WeightInOZ / 16
Run Code Online (Sandbox Code Playgroud)

由于您正在处理两个整数,因此SQL Server会截断余数,因此没有用于舍入的小数组件.

你想要做的是强迫它执行浮点(或十进制)除法.最简单的方法是16改为16.0.

SELECT
   ROUND(WeightInOZ / 16.0, 2)as WeightInLbs
FROM
   Inventory
Run Code Online (Sandbox Code Playgroud)