Java文字列は、結果を計算して出力するために算術式に変換されます。このツールは、文字列の形で算術式を直接計算でき、非常に簡単に使用できます。
このツールには、2つのクラスの計算機とarithhelperが含まれています
電卓コードは次のとおりです。
java.util.collections;インポートJava.util.stack;/***算術式評価*直接コール計算機のクラスメソッド変換()*算術式を渡すと、流動点値の結果が返されます*計算プロセスが正しくない場合、NANは返されます*/公共クラス=プライベートSTACK < private stack <character> opstack = new stack <character>(); // operator stack private int [] operatorpriority = new int [] {0、3、2、1、-1、1、0、2} = Cal.Calculate(expression);} catch(Exception E){// e.printstacktrace(); //操作エラーはnanreturn 0.0/ 0.0;} // return new string()。 〜2+〜1 *(〜3e〜2) - (〜1) *@return */private static string transform(string expression){char = expression.tochararray(); (c == '+' || c == ' - ' || c == '*' || c == '/' || c == '(' || c == 'e' || c == 'e'){arr [i] = '〜';}}}}}}}}}}}}}}}}}}}}}}}}}}}}} string(arr);} else {return new string(arr);}}/** *指定された式 * * @param式 * @param式 *計算する式 * 5+12 *(3+5)/7 * @return */public double calucute(string expression){stack <string> resultsstack = new strinves(subtix); prepare(aspfixstack); Stack String FirstValue、SecondValue、currentValue; // first value、secondValue、currentValue; //最初の値、2番目の値、算術演算子は計算に参加します。オペランドスタックcurrentValue = currentValue.Replace( "〜"、 " - "); resultStack.push(currentValue);} else {//オペロンのスタックから2つの値を取得し、secondValue = resultStack.pop(); first stack.pop() firstValue.Replace( "〜"、 " - "); secondValue = secondValue.Replace( "〜"、 " - "); string tempresult = calculate(firstValue、currentValue.Charat(0)); resultStack.push(tempresult);}} double.valueofを返す}接尾辞スタック * * @param式 */private void prepare(string expression){opstack.push( '、'); //オペレーターはカンマをスタックの下部要素に配置します。算術演算子は便利または数値char currentop、peekop; 2つの演算子の間の数字} peekop = opstack.peek(); if(currentop == ')'){// unbranchに遭遇した場合、オペレータースタックの要素を接尾辞スタックに削除します。 {postfixstack.push(string.valueof(opstack.pop());} opstack.pop();} else {while(currentop!= '(' && peekop!= '、' && compare(current、peekop)){postfixstack.push(string.valueof(opstack.pop = peekop); peekop); opstack.peek();} opstack.push(currentop);} count = 0; currentIndex = i+1;} else {count ++;}} if(count> 1 ||(count == 1 &&!isoperator(arr index]))){//最後の文字がブラッケットまたは他のオペレーターではない場合、brackt.post post post post post post post post post suped ops ops ops on oper cost it int(count = 1 &&!isoperator) string(arr、currentindex、count));} while(opstack.peek()!= '、'){postfixstack.push(string.valueof(opstack.pop())); c){c == '||' || '||。 curよりも高い、return true、デフォルトのピークの優先順位は低いresult = falsです((peek)-40]> = operator priolity [(cur)-40]){result = true;}/** *与えられた算術演算子 * @primated sertunt caltunt(@param cantop * @param) firstValue、string secondValue、char currentop){string result = ""; switch(currentop){case '+':result = string.valueof(arithhelper.add(firstValue、secondValue)); case ' - ':rest = string.valueof(arithhelper.sub(firstValue、secondValue)); string.valueof(arithhelper.mul(firstValue、secondValue)); break; case '/':result = string.valueof(arithhelper.div(firstValue、secondValue));} return result;}}}}arithhelperコードは次のとおりです。
パブリッククラスarithhelper {//デフォルトのディビジョン操作精度private static final def_div_scale = 16; //このクラスは、private arithhelper(){}/***は正確な追加操作を提供することはできません。 * * @param v1 addd * @param v2 add * @return 2つのパラメーターの合計 */public static double add(double v1、double v2){java.math.bigdecimal b1 = new java.math.bigdecimal(double.tostring(v1)); java.math.bigdecimal b2 = new b2 = new new b2 = neg java.math.bigdecimal(double.tostring(v2)); return b1.add(b2).doublevalue();} public static double add(string v1、string v2){java.math.bigdecimal b1 = new java.math.math.bigdecimal(v2); java.math.bigdecimal java.math.bigdecimal(v2); return b1.add(b2).doublevalue();}/***正確な減算操作を提供します。 ** @Param V1減算* @Param V2 Subtract* @returnの2つのパラメーター間の違い*/public static double sub(double v1、double v2){java.math.math.math.math.math.bigdecimal(double.tostring(v1)); java.math.bigdecimal(double.tostring(v2)); return b1.subtract(b2).doublevalue();} public static double sub(string v1、string v2){java.math.bigdecimal b1 = new java.math.math.bigdecimal(v2); java.math.bigdecimal java.math.bigdecimal(v2); return b1.subtract(b2).doublevalue();}/***正確な乗算操作を提供します。 * * @param v1 * Multiplier * @param V2 * Multiplier * @return製品2つのパラメーター */public static double mul(double v1、double v2){java.math.bigdecimal b1 = new java.math.math.bigdecimal(double.tosstring(v1); java.math.bigdecimal(double.tostring(v2)); return b1.multiply(b2).doublevalue();} public static double mul(string v1、string v2){java.math.math.bigdecimal b1 = new java.math.bigdecimal(v1); java.math.bigdecimal(v2); return b1.multiply(b2).doublevalue();}/***は(比較的)正確な分割操作を提供します。分割がない場合、小数点後の10桁まで正確であり、その後の数値は丸みを帯びています。 * * * @param v1 * dividider * @param v2 * divider * @return quotation of 2つのパラメーターの引用 */public static double div(double v1、double v2){return div(v1、v2、def_div_scale);} public static double div(string v1、string v2){java.math.math.bigdecimal java.math.bigdecimal(v1); java.math.bigdecimal b2 = new java.math.bigdecimal(v2); return b1.divide(b2、def_div_scale、java.math.bigdecimal.round_half_up()。 手術。分離を完了するための終わりがない場合、精度はスケールパラメーターによって指定され、後続の数値は丸められます。 ** @Param V1 Divider* @Param V2 Divider* @Param Scaleは、小数点以降に数桁に正確にする必要があることを意味します。 * 2つのパラメーターの@returnの商*/public static double div(double v1、double v2、int scale){if(scale <0){throw new IllegalargumentException( "スケールは正の整数またはゼロでなければなりません");} java.math.bigdecimal b1 = new java.math.bigdecimal(double.tostring(v1)); java.math.bigdecimal b2 = new java.math.bigdecimal(double.tostring(v2)); return b1.divide(b2、scale、 java.math.bigdecimal.round_half_up).doublevalue();}/***正確な小数の丸めを提供します。 ** @param v丸くする必要がある@param vカウント* @paramスケール小数点の後に数桁が保持される数桁丸めた後の結果*/public static double round(double v、int scale){if(scale <0){show new elegalgumentexception( "スケールはポジティブインテルまたはゼロ");} java.math.bigdecime java.math.bigdecimal(double.tostring(v)); java.math.bigdecimal one = new java.math.bigdecimal( "1"); return b.divide(1つ、scale、java.math.bigdecimal.round_half_up {if(scale <0){新しいIllegalargumentexception( "スケールは正の整数またはゼロでなければならない") java.math.bigdecimal.round_half_up).doublevalue();}}}それを使用するときは、計算機クラスの変換()メソッドを呼び出し、算術式パラメーターに渡して、タイプの値を返します。
使用例:
public class mathtest {public static void main(string [] args){string expression = "(0*1--3)-5/-4-(3*( - 2.13))"; double result = calculature.conversion(expression); out.println(expression + "=" + result); system.out.out.th;}}}コンソール出力:
(0*1--3)-5/-4-(3*( - 2.13))= 10.64
スクリーンショットのテスト:
要約します
上記は、Java Computational Mathatical Expression Codeのすべての詳細な説明です。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!