Android 计算方法总结

各位看官是否遇到过这样一种情况:别人给你一个字符串 比如 “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 根号”等。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180514G1ZQ1600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券