我正在寻找一种截断或删除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,那不适合我的申请。
该如何解决?
答案 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)