javascript数字,字符串,数学和正确的方法

时间:2012-11-29 03:25:47

标签: javascript jquery string

我有一个javascript / jquery代码,它接收用户的公式和数字并解决方程式。我在jquery中的代码可以将解决方案降低到实数,但是以字符串的形式,我无法通过数学方式获得javascript来解决方程式。

我有类似

的东西
1000 * (200+3928)/2333

但是,这些数字都是字符串格式并强制它们分别为浮点数或整数并重新插入它们只会将它们变回字符串。尝试使用valueOf和其他东西,但没有任何作用。有没有更好的方法或我缺少的东西?

由于

4 个答案:

答案 0 :(得分:1)

您会发现parseInt()parseFloat()非常有帮助。请务必包含您的基数,以便正确解析值。

var first = "1000", // String
    secnd = "25.2", // String
    third = parseInt(first, 10) * parseFloat(secnd); // Number

如果您处于简洁状态,以牺牲一些可读性为代价,您还可以使用+运算符将字符串转换为数字:

+"23"; // 23
+"2.3"; // 2.3

演示:http://jsfiddle.net/bj74v/1/

答案 1 :(得分:1)

当你有一个字符串形式的简单方程时,最实用的方法是将字符串解析为prefixpostfix表示法,然后相应地评估它......

假设原始字符串是infix(人类用来学习基本数学的符号),例如......

1000 * (200+3928)/2333

然后将其转换为postfix以获取...

1000, 200, 3928, +, *, 2333, /

使用这种表示法,计算机可以使用简单的循环和堆栈轻松评估表达式......

我不会发布实际的代码,因为我想把有趣的部分留给你,但是如果你想要一个带有伪代码的headstart,这里就是......

infix to postfix :

  create empty array `postfix` and `temp`

  split the expression up into an array `A` by each operand/operator

  foreach token in `A`:
    if char is operand :
      push to postfix stack
    if char is open parenthesis:
      push to temp stack
    if char is close parenthesis:
      while top of temp stack != '(' :
        push top of temp stack to postfix stack
        pop top of temp stack
      end while
      pop top of temp stack
    if char is operator:
      while temp stack isn't empty *and* top of temp stack != '(' *and* precendence(char) <= precendence(top of temp stack) :
        push top of temp stack to postfix stack
        pop top of temp stack
      end while
      push char to temp stack

  end for loop

  while temp stack is not empty
    push top of temp stack to postfix stack
    pop top of temp stack
  end while

  return postfix stack (will be your postfix stack to evaluate)



evaluate postfix stack:
  create array A
  foreach token in postfix stack:
    if char is operand:
      push to A stack
    if char is operator:
      int x = pop A stack
      int y = pop A stack
      result = x (operation) y
      push result to A stack
  end for loop

  return top of A stack (this will be the final result)

答案 2 :(得分:0)

如果你想制作一个自由形式的计算器,你有两个选择。你可以用eval()直接计算结果,就像elclanrs说的那样。但是,用户可以键入任意Javascript代码,因此不建议这样做。您的第二个选择是创建表达式解析器和求值程序。如果你想处理括号和东西,这并不困难,但它也不是很简单。这是我通过搜索“javascript算法解析器”找到的一个例子:http://code.google.com/p/js-equation-parser/。它是开源的,所以如果你想知道它是如何完成的,请查看代码。

答案 3 :(得分:-1)

您的意思是用户实际输入1000 * (200+3928)/2333或者是从不同输入中获取的数字并存储在变量中然后计算结果?

如果是第一种情况,那么您可以使用eval

eval('1000 * (200+3928)/2333')

如果是第二种情况,你可以在字符串前加+,然后将其转换为如下数字:

var num = +'1000'