繁体   English   中英

JavaScript数学计算案例

[英]JavaScript math calculation case

我需要执行JavaScript计算,如下所示:

1-500,000积分$ 30 / 100,000积分

500,001-999,999点$ 25 / 100,000点

1,000,000+点$ 20 / 100,000点

我有大小写转换,它将检查该值,然后获取正确的总和,但是我想知道例如如果用户输入4,500,000点或某个大于1,100,000的随机值,该怎么做。

这是我目前拥有的:

  if (Number(amountOfPoints) > Number(0)) {
    switch (true) {
        case (amountOfPoints > 0 && amountOfPoints <= 100000):
            {
                price = 30;
                break;
            }
        case (amountOfPoints > 100000 && amountOfPoints <= 200000):
            {
                price = 60;
                break;
            }
        case (amountOfPoints > 200000 && amountOfPoints <= 300000):
            {
                price = 90;
                break;
            }
        case (amountOfPoints > 300000 && amountOfPoints <= 400000):
            {
                price = 120;
                break;
            }
        case (amountOfPoints > 400000 && amountOfPoints < 500000):
            {
                price = 150;
                break;
            }
        case (amountOfPoints > 500000 && amountOfPoints < 600000):
            {
                price = 150;
                break;
            }
        case (amountOfPoints > 600000 && amountOfPoints < 700000):
            {
                price = 160;
                break;
            }
        case (amountOfPoints > 700000 && amountOfPoints < 800000):
            {
                price = 185;
                break;
            }
        case (amountOfPoints > 800000 && amountOfPoints < 900000):
            {
                price = 210;
                break;
            }
        case (amountOfPoints > 900000 && amountOfPoints < 1000000):
            {
                price = 235;
                break;
            }
        case (amountOfPoints <= 1000000):
            {
                tweetsPrice = 200;
                break;
            }
        default:
            price = 0;
            break;
    }
}

如何计算点数> 1,100,000? 每增加100,000,应增加$ 20。

更新资料

也许不清楚我需要什么。 这就是我需要的:一旦值超过1,100,000,相应地计算的价格,例如,对于1,100,001和1,200,000之间的点,价格将为$ 220,对于1,200,001和1,300,000之间的点,价格将为$ 240,依此类推,无限制,例如4,500,001和4,600,000的价格将为720美元。

这是jsfiddle。 您可以输入积分并查看奖励值。

您的点系统似乎是任意的,因此我更改为始终从1开始,而不是从0开始,有时从1开始。如果您不喜欢它,则可以更改函数。

function points(inText) {
    var inNum = (isNaN(Number(inText))) ? 0 : Math.floor(Number(inText));
    inNum = Math.floor(inNum / 100000);
    if (inNum < 5) {
        inNum = inNum * 30;
    } else {
        if (inNum < 10) {
            inNum = (inNum - 5) * 25 + 150;
        } else {
            inNum = (inNum - 10) * 20 + 275;
        }
    }  
    return inNum;
}

通常,它的工作方式如下:

function calcPrice(value) {
  if (value <= 500000) {
    return 30 * Math.ceil(value / 100000);
  } else if (value <= 1000000) {
    return 150 + 25 * Math.ceil((value - 500000) / 100000);
  } else {
    return 275 + 20 * Math.ceil((value - 1000000) / 100000);
  }
}

但是按照您的帖子的字母:

function calcPrice(value) {
  if (value <= 500000) {
    return 30 * Math.ceil(value / 100000);
  } else if (value <= 1000000) {
    return 25 * Math.ceil(value / 100000);
  } else {
    return 20 * Math.ceil(value / 100000);
  }
}

我有点累,但我认为这可能适用于任何amountOfPoints:

var price = 30,
    strPoints = amountOfPoints.toString(),
    points = Number(amountOfPoints);

if (points >= 100000) {
  var multiplier = Number(points.toString().substring(0, 5 - strPoints.length));
  price += 20 * multiplier;
}

基本上只做price = 30 + 20 * the_significant_digits_of_amountOfPoints ,其中amountOfPoints大于100,000。 子字符串部分在有6位数字时为您提供1,在有7位数字时为您提供2,依此类推。

这应适用于用例“每100,000应增加$ 20”。 但是您的case语句为价格分配了不遵循此模式的值。 因此,在您的点数足够大以超过其中的条件之后,您将必须使用此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM