我使用javascript并想知道如何解决这个代数表达式。
原始等式:
1000 = 500x^2 - 500x
这是我想要解决的等式。 我尝试简化它以使Xs在等式的同一侧 但结果却是这样。
1000 = 500x(x - 1)
1000/500 = x^2 - x
sqrt(1000/500 + x) = x
如果我以其他方式解决,我会得到一个变量的2个答案。 x = 2, -1
上面的方法似乎是从方程中得出2的最佳方法,但我不知道如何在代码中解决它的逻辑。
现在Xs位于等式的两个不同侧面。 这就是我提出的代码,但输出是NaN。
var level = Number(Math.floor(Math.sqrt((1000/500) + level)));
当然这会产生问题,因为我需要找到级别值的级别。
我如何在代码中解决这个等式?
更具体地说,1000只是占位符值。
var xp = Number(getProp('xp'));
var level = Number(Math.floor(Math.sqrt((xp/500) + level)));
当你有多少xp时,我的程序应该找到你的等级。
var xp
获取您当前拥有的xp数量。
在1000 xp时,你成为2级。
Number(getProp('xp')
就在那里,因为我在google sheet中这样做。
答案 0 :(得分:0)
描述
如果x的值为负,则Math.sqrt()返回NaN。
因为sqrt()是Math的静态方法,所以总是将它用作Math.sqrt(),而不是您创建的Math对象的方法(Math不是构造函数)。
使用您的absolute value (modulo)值,或确保始终为正。
此外,在JavaScript中使用任何变量之前,请确保其类型是预期的类型,或者它是否存在。
function getLevel(xp){
if(typeof xp === 'number') {
return Math.sqrt(Math.abs(xp/500));
} else {
return -1; // this is an error....
}
}
答案 1 :(得分:0)
(代表OP发布)。
答案来自@forret:
function getLevel(xp)
{
var b = -500, a = 500;
return (-b + Math.sqrt(b*b - >4 * a * (-xp)))/ (2*a);
}
它只使用二次公式。