复数变量求解:1000 = 500x ^ 2 - 500x

时间:2016-06-06 16:14:07

标签: javascript algebra

我使用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中这样做。

2 个答案:

答案 0 :(得分:0)

As per documentation:

  

描述

     

如果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);
}

它只使用二次公式。