范围的折扣计算

时间:2012-08-02 14:57:18

标签: math range discount cumulative-sum

折扣计算:

Product quantity and range

1  - 10    -    1%
11 - 20    -    2%
21 - 30    -    3%
31 - 40    -    4%
41 - 50    -    5%

以上是给出的数量范围及其折扣百分比,

for example:
each product cost is 100
if i purchase 50 product then 5% discount is 250


Now if i purchase 50 products at 2 terms let say 20 and 30 then
for 20 product 2% discount = 40
for 30 product 3% discount = 90
total discount             = 130

但是我必须得到折扣250,

问题描述: 产品可以按n个条款购买最大数量,此处最大数量为50.购买产品的折扣%由上述范围给出。当添加总折扣时,它应该是相等的。在这里购买50个产品250是折扣同样250应该是总折扣,即使购买的产品为20,10,10或25,25等......

PLZ帮我计算部分,用一些公式或任何东西......

2 个答案:

答案 0 :(得分:1)

  1. 计算上一项计数的折扣。 (之前已经给了多少折扣。)
  2. 计算新项目计数的折扣(上一个+当前订单)。 (客户应该享受多少折扣。)
  3. 给出最终折扣作为两个值之间的差异。
  4. 将客户的新项目计数(每种类型)存储到某个数据库。
  5. float SimpleDiscount(float cost, int count)
    {
        if (count <= 0) return 0;
        if (count <= 10) return 0.01f * cost;
        if (count <= 20) return 0.02f * cost;
        if (count <= 30) return 0.03f * cost;
        if (count <= 40) return 0.04f * cost;
        return 0.05f * cost; // count > 40
    }
    
    float GetDiscount(int customerId, int itemId, int count)
    {
        float cost = GetItemCost(itemId);
    
        int previousCount = GetCustomerOrderedItemCount(customerId, itemId);
        float previousDiscount = SimpleDiscount(cost, previousCount);
    
        int newCount = previousCount + count;
        float newDiscount = SimpleDiscount(cost, newCount);
    
        SaveCustomerOrderedItemCount(customerId, itemId, newCount);
    
        return newDiscount - previousDiscount;
    }
    

    例如:

    Item cost = 100
    For 20 items: Discount = 40 (2%)
    For 30 items: Discount = 210 (7%)
    Total discount = 250 (5%)
    

答案 1 :(得分:1)

我认为您希望折扣率随着购买商品数量的增加而增加,如果是这种情况,就无法做到这一点

这是逻辑。基本等式是:

n 1 d 1 + n 2 d 2 + n 3 d 3 =(n 1 + n 2 + n 3 )d x

一个明显的解决方案是让所有的d相等,即所有折扣率都相同。否则,没有一般的解决方案(也就是说,没有一组d将适用于所有n种组合 - 例如,只要其中一个n都是零,那么等式两边的d'将必须是相同,所以唯一的通用解决方案是所有的d都是相同的),如果你想要一个具有不同d的特定解决方案,你可以在给定一组n的情况下求解d的正确值,但是当你这样做,很明显,如果其中一个小于d x ,另一个必须更大,所以你不能有严格的贴现率。