【发布时间】:2017-09-13 15:11:31
【问题描述】:
我有一个数据集,我需要计算价格并舍入到小数位。但结果并不完全符合预期。计算在case语句中
CREATE TABLE #Temp ( ID INT IDENTITY(1,1), Price DECIMAL(7,2) )
INSERT INTO #TEMP ( Price )
VALUES ( 119.99 )
, ( 48.99 )
SELECT
ID
, Price
, CASE WHEN Price > 10 THEN CONVERT( DECIMAL(7,2), Price * 1.08 - 0.05 ) END AS RRP
FROM #Temp
DROP TABLE #Temp
结果
ID Price RRP
1 119.99 129.54
2 48.99 52.86
如果可以与另一个数据集匹配,我需要在同一 case 语句中获取 129.54 到 129.55 和 52.86 到 52.85
【问题讨论】:
-
(119.99 * 1.08) - 0.05= 129.5392,所以 1.54 是正确的。此外,ID 2 为 52.8592。你需要 129.55 和 52.85 的逻辑是什么? -
round(price*1.08-0.05,2)转换前。否则转换只会截断。THEN CONVERT( DECIMAL(7,2), round(price*1.08-0.05,2)) -
PEMDAS 问题?以错误的顺序混合乘法和加法/减法可能会产生不同的结果 - 请查看此链接:en.wikipedia.org/wiki/Order_of_operations
-
@Eli 我不认为这是 PEMDAS。如果他打算先进行减法运算,那么第一个结果将是 123.59。
-
@xQbert:可能四舍五入到下一个
5?
标签: sql sql-server rounding