[英]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.