1

ユーザーから式と数値を受け取り、方程式を解くjavascript/jqueryコードがあります。jquery の私のコードは解を実数にまで下げることができますが、文字列の形式であり、方程式を数学的に解くための JavaScript を取得できません。

私は次のようなものを持っています

1000 * (200+3928)/2333

ただし、これらの数値はすべて文字列形式であり、それぞれを浮動小数点数または整数に強制し、再挿入すると文字列に戻るだけです。valueOf などを使用してみましたが、何も機能しません。より良い方法や私が見逃しているものはありますか?

ありがとう

4

4 に答える 4

1

文字列の形式の単純な方程式がある場合、最も実用的な方法は、文字列をprefixorpostfix表記に解析し、それに応じて評価することです...

infix元の文字列が(基本的な数学を学ぶために人間が使用する表記法)であると仮定すると...

1000 * (200+3928)/2333

次に、それを変換しpostfixて取得します...

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

この表記法を使用すると、コンピューターは単純なループとスタックを使用して式を簡単に評価できます...

楽しい部分はあなたに任せたいので、実際のコードは投稿しませんが、疑似コードで有利なスタートを切りたい場合は、ここに...

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)
于 2012-11-29T04:08:34.527 に答える
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/

于 2012-11-29T03:29:34.357 に答える
0

自由形式の電卓を作成しようとしている場合、2 つの選択肢があります。eval()elclans が言ったように、結果を直接計算するために使用できます。ただし、ユーザーは任意の Javascript コードを入力できるため、これはお勧めできません。2 番目のオプションは、式のパーサーとエバリュエーターを作成することです。括弧などを処理したい場合、難しくはありませんが、それほど簡単ではありません。「javascript 算術パーサー」を検索して見つけた例を次に示します: http://code.google.com/p/js-equation-parser/。これはオープン ソースなので、その方法が知りたい場合はコードを調べてください。

于 2012-11-29T03:36:33.033 に答える
-1

ユーザーが実際に1000 * (200+3928)/2333入力したり、さまざまな入力から数値を取得して変数に格納したりして、結果を計算することを意味しますか?

それが最初のケースである場合は、次を使用できますeval

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

2 番目のケースの場合は+、文字列の先頭に a を追加して、次のような数値に変換できます。

var num = +'1000'
于 2012-11-29T03:31:27.413 に答える