各位看官是否遇到过这样一种情况:别人给你一个字符串 比如 “1+6+6*6” 让你算出结果。这个时候你想到的方法有多少种方法呢?我这里有2种方法可以参考。
根据平常业务要求,往往根据用户输入一个完整公式,这个公式是变化的,程序需要根据公式计算一个结果。
1
使用JavaScript 函数。这个是Android调用。
// 计算单独一个步骤
public void 计算步骤(String 表达式,ValueCallback resultCallback) {
try {
webView.evaluateJavascript("(function() { return eval(" + 表达式
+ "); })();", resultCallback);
} catch (Exception e) {
}
}
//调用
计算步骤(表达式,new ValueCallback() {
@Override
public void onReceiveValue(String result) {
Message message = new Message();
message.obj = result;//回调函数 计算的结果,需要异步显示
handler.sendMessage(message);
}
});
@SuppressLint("NewApi")
private void 表达式_执行(String Js公式) {
webView.evaluateJavascript("(function() { return eval(" + Js公式
+ "); })();", _resultCallback);
}
==============这部分 有 ‘替换’ 两字 是javaScript 用的函数=====
private String[] _常用三角函数 = new String[] { "Sin", "Cos", "Tan" };
private String[] _替换三角函数 = new String[] { "Math.sin((Math.PI/180)*",
"Math.cos((Math.PI/180)*", "Math.tan((Math.PI/180)*" };
private String[] _常用反三角函数 = new String[] { "Arcsin", "Arccos", "Arctan" };
private String[] _替换反三角函数 = new String[] { "1/(Math.PI/180)*Math.asin",
"1/(Math.PI/180)*Math.acos", "1/(Math.PI/180)*Math.atan" };
private char[] _常用运算符 = new char[] { '×', '÷' };
private char[] _替换运算符 = new char[] { '*', '/' };
private String[] _常用常数 = new String[] { "π", "е" };
private String[] _替换常数 = new String[] { "Math.PI", "Math.E" };
=========================================================
C# 调用。
///
/// 表达式_执行
///
///
///
public static string 表达式_执行(string strExpression)
{
string strCalculatValue = "";
try
{
//执行脚本进行计算(编译不过,项目添加引用:Microsoft.JScript 和Microsoft.Vsa)//自己百度获取这个dll,
VsaEngine ve = VsaEngine.CreateEngine();
strCalculatValue = Eval.JScriptEvaluate(strExpression, ve).ToString();
}
catch (Exception e)
{
Debug.Assert(false, e.Message);
strCalculatValue = e.Message;
}
return strCalculatValue;
}
2
用数据库本身函数计算。 Android 中的 SQLiteDatabase数据库.
private SQLiteDatabase _Database = null;//自己百度 怎么打开 SQLiteDatabase
public String 计算(string 表达式){
String strSQLText=String.format("select %s as result from TableName limit 1", 表达式)//TableName 是数据库中的某张表的名称。自己改
Cursor cursor = null;
try
{
cursor = _Database.rawQuery(strSQLText, null);
}
catch (RuntimeException e)
{
cursor = null;
Log.e("出错的SQL语句--> ", strSQLText);
return null;
}
catch (Exception e)
{
cursor = null;
Log.e("查询出异常了----", e.toString());
return null;
}
return cursor.getString(cursor.getColumnIndex("result")
}
PS:表达式自己 百度,这两条--》
select 10+5+Sin(100) as result --
select POWER(4,3) as result --4的 3次方 ps: 想知道sql语句中的函数,百度 “sql 平方”或者““sql 根号”等。