截断SQL Server的舍入值

时间:2018-10-18 00:18:49

标签: sql-server tsql rounding

我正在寻找一种截断或删除SQL中多余小数位的方法。我找到了一种方法,但是我的值没有小数点后3位有问题。

我有以下数据

ProductID   |  Price   |  Amount  
------------+----------+---------
   100      |  50.01   |   1
   101      |  25      |   0.789

这很简单,我要做的就是从每种产品中获取总计(价格*金额)。

我的查询:

select 
    [ProductID],
    [Price],
    [Amount],
    round(SUM(([Price] * [Amount])),2,1) as 'Total'
from 
    [Tables]

我得到的是:

ProductID  |   Price   |  Amount   |   Total
-----------+-----------+-----------+-----------
   100     |   50.01   |     1     |     50     <=======
   101     |     25    |   0.789   |    19.72

因此,如果我的计算器正在运行,则此简单操作的结果为:

(50.01 * 1) = 50.01
-
(25 * 0.789) = 19.725
-

问题:SQL确实把技巧从19.725降到了5,但是为什么(50.01 * 1)等于50?

我确实知道,如果我使用 Round((value),2,0 我会得到50.01,但是如果我这样做,则19.725变为19.73,那不适合我的申请。

该如何解决?

2 个答案:

答案 0 :(得分:0)

SELECT ProductID,
       Price,
       Amount,
       CAST(SUBSTRING(CAST(CAST(Price * Amount AS decimal(18,3)) AS VARCHAR),0, LEN(CAST(CAST(Price * Amount AS decimal(18,3)) AS VARCHAR))) AS DECIMAL(18,2)) AS Total
FROM  [Tables]

答案 1 :(得分:0)

如果将价格和金额转换为如下所示的数字或十进制数据类型,则应获得预期结果:

Exception has occurred.
PlatformException(error, Invalid document reference. Document references must have an even number of segments, but users has 1, null)