9

我在一个表中有两列填充了整数值。对于每条记录,我想将这两列的值相除并格式化输出,以便将小数点移到右侧。

例如,如果我将一条记录的两列的值为 4 和 1,并且我想将 1 除以 4(所以 1/4),那么我希望输出为 25.00。

这是我之前尝试的最后一件事:

CAST(Total AS Decimal(2))/CAST(TotalAnswers AS Decimal(2)) AS 'Percent' 

我一直无法找到 CAST 函数的语法解释,以查看传入的十进制参数代表什么。当我改变它时,它有时会改变小数点右边的位数,但结果并不总是我所期望的,所以我想在这方面得到一些帮助。

4

4 回答 4

22

Write it like this:

SELECT CAST(CAST(Total As float) / TotalAnswers * 100 As decimal(8, 2))
于 2012-04-10T20:55:28.857 回答
3

DECIMAL(2)是小数点前 2 位,小数点后没有数字的小数。那不允许你在小数点后有数字!

规范定义了总DECIMAL(p,s)位数(p)和小数点后的位数(s)(其中s不能大于p,如果省略则为 0)。

您需要使用类似DECIMAL(4,2)总共 4 位 - 其中小数点后有 2 个;因此:小数点前还有 2 个)或类似的东西 - 小数点前的一些数字和小数点后的一些数字 - 然后你会看到你的想要的结果!

有关类型及其语法的详细信息,请参阅有关十进制和数字DECIMAL的 MSDN 联机丛书主题

于 2012-04-10T20:49:38.193 回答
2

实际有几个参数..

(p, s)

在哪里

  • p 代表“精度”——小数点前后的总位数。
  • s 代表“刻度”——小数点后的位数。

通过只给出 1 个参数,您只给出了精度。

请参阅MDSN

于 2012-04-10T20:50:30.390 回答
1

来自在线书籍的十进制数据类型:具有固定精度和小数位数的数值数据类型。

decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 SQL-92 同义词是 dec 和 dec(p, s)。numeric 在功能上等同于十进制。

p(精度)可以存储的小数位数的最大总数,包括小数点的左侧和右侧。精度必须是 1 到最大精度 38 之间的值。默认精度为 18。

s(刻度)小数点右侧可以存储的最大小数位数。比例必须是从 0 到 p 的值。仅当指定精度时才能指定比例。默认比例为 0;因此,0 <= s <= p。最大存储大小因精度而异。

于 2012-04-10T20:53:44.773 回答