我试图编写PL / SQL,以便在购买一定数量的商品时获得多少付款。如果您购买3件商品,则可免费获赠1件商品。
因此,购买的每4件物品中有一件是免费的。这意味着如果购买了4件物品,我将支付3件物品。"如果达到10项,则应支付8项,其中2项是免费的。
p-b v_p
*** ***
1 1 = 1
2 2 = 2
3 3 = 3
4 3(1) = 3
5 3(1) + 1 = 4
6 3(1) + 2 = 5
7 3(1) + 3 = 6
8 3(1) + 3(1) = 6
9 3(1) + 3(1) + 1 = 7
10 3(1) + 3(1) + 2 = 8
11 3(1) + 3(1) + 3 = 9
12 3(1) + 3(1) + 3(1) = 9
我有
trunc(p-b / 3 * 2.4);
但我的价值观不一致。
有时可以使用
trunc(p-b / 3 * 2.25);
我做错了公式吗?我应该使用trunc或mod。
答案 0 :(得分:1)
答案 1 :(得分:1)
我们可以使用以下公式来获得结果。
假设n = p-b
n - ( n - mod( n, 4 ) ) / 4
例如:
SELECT n, n - (n - mod(n,4))/4 result
FROM (SELECT LEVEL n
FROM DUAL
CONNECT BY LEVEL <= 12)
答案 2 :(得分:1)
以简单的方式结果是:
-t image
答案 3 :(得分:1)
计算支付/免费资料的数量:
DECLARE
nAmount NUMBER := '10';
nPay NUMBER;
nFree NUMBER;
BEGIN
nPay := nAmount - TRUNC(nAmount / 4);
nFree := TRUNC(nAmount / 4);
DBMS_OUTPUT.PUT_LINE('Pay: ' || nPay);
DBMS_OUTPUT.PUT_LINE('Free: ' || nFree);
END;
/