公式买三送一
Formula for Buy 3 get 1 Free
我正在尝试写 PL/SQL 以了解如果您购买了一定数量的商品,您需要支付多少钱。如果您购买 3 件商品,您将免费获得 1 件。
因此,每购买 4 件商品,其中一件免费。这意味着我支付 3 件如果 4 件是 "purchased." 如果达到 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。
我会使用 trunc
和 modulo
SELECT p-b, (trunc(p-b /4)) * 3 + mod(p-b, 4)
FROM your_table
我们可以使用下面的公式来得到结果。
假设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)
简单来说,结果是:
p-b - trunc(p-b / 4);
计算Payed/Free东西的数量:
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;
/
我正在尝试写 PL/SQL 以了解如果您购买了一定数量的商品,您需要支付多少钱。如果您购买 3 件商品,您将免费获得 1 件。
因此,每购买 4 件商品,其中一件免费。这意味着我支付 3 件如果 4 件是 "purchased." 如果达到 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。
我会使用 trunc
和 modulo
SELECT p-b, (trunc(p-b /4)) * 3 + mod(p-b, 4)
FROM your_table
我们可以使用下面的公式来得到结果。
假设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)
简单来说,结果是:
p-b - trunc(p-b / 4);
计算Payed/Free东西的数量:
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;
/