SQL在乘法后丢失小数

时间:2017-07-25 18:42:09

标签: sql sql-server

我有一张表格,其中包括:

COUNT    RISK
35       0.6456000000
11       0.5234000000
4        0.8431000000

我需要一列来乘以两列。但是我得到的结果是:

TOTAL
35
11
4  

COUNT - INT

RISK - VARCHAR

SQL显然将小数点四舍五入为1.我尝试将十进制数字转换为数字并乘以1.0。我需要保留小数以进行实际计算。任何帮助都会很棒

2 个答案:

答案 0 :(得分:2)

将结果转换为十进制,如此

SELECT 
   CONVERT(DECIMAL(16,10), COUNT * RISK) AS DecimalResult
FROM dbo.whatever;

或将COUNT转换为十进制

SELECT CAST(COUNT AS DECIMAL(16,10)) * RISK

答案 1 :(得分:2)

这个问题真的很可疑。从表面看,似乎两列[Count]和[Risk]具有不同的数据类型,[Count]为整数,[Risk]为decimal或float。 根据BOL,十进制/浮点数据类型具有更高的优先级,我将在此处引用BOL

  

当运算符组合了两种不同数据类型的表达式时,数据类型优先级的规则指定具有较低优先级的数据类型转换为具有较高优先级的数据类型。如果转换不是受支持的隐式转换,则会返回错误。当两个操作数表达式具有相同的数据类型时,操作的结果具有该数据类型

对我来说,在 SQL Server 中,当你做

Select [Total]=[Count]*[Risk] from [your_table]

您无法获得原始问题中显示的结果。