計算字串中的簡單數學公式
今天公司產品提出需求。需要把計算公式放到伺服器,然後伺服器可動態化配置。所以找尋各種資料從而由此方法
程式碼如下:
public static double eval(final String str) {
return new Object() {
int pos = -1, ch;
void nextChar() {
ch = (++pos < str.length()) ? str.charAt(pos) : -1;
}
boolean eat(int charToEat) {
while (ch == ' ')
nextChar();
if (ch == charToEat) {
nextChar();
return true;
}
return false;
}
double parse() {
nextChar();
double x = parseExpression();
if (pos < str.length())
throw new RuntimeException("Unexpected: " + (char) ch);
return x;
}
double parseExpression() {
double x = parseTerm();
for (;;) {
if (eat('+'))
x += parseTerm(); // addition
else if (eat('-'))
x -= parseTerm(); // subtraction
else
return x;
}
}
double parseTerm() {
double x = parseFactor();
for (;;) {
if (eat('*'))
x *= parseFactor(); // multiplication
else if (eat('/'))
x /= parseFactor(); // division
else
return x;
}
}
double parseFactor() {
if (eat('+'))
return parseFactor(); // unary plus
if (eat('-'))
return -parseFactor(); // unary minus
double x;
int startPos = this.pos;
if (eat('(')) { // parentheses
x = parseExpression();
eat(')');
} else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
while ((ch >= '0' && ch <= '9') || ch == '.')
nextChar();
x = Double.parseDouble(str.substring(startPos, this.pos));
} else if (ch >= 'a' && ch <= 'z') { // functions
while (ch >= 'a' && ch <= 'z')
nextChar();
String func = str.substring(startPos, this.pos);
x = parseFactor();
if (func.equals("sqrt"))
x = Math.sqrt(x);
else if (func.equals("sin"))
x = Math.sin(Math.toRadians(x));
else if (func.equals("cos"))
x = Math.cos(Math.toRadians(x));
else if (func.equals("tan"))
x = Math.tan(Math.toRadians(x));
else
throw new RuntimeException("Unknown function: " + func);
} else {
throw new RuntimeException("Unexpected: " + (char) ch);
}
if (eat('^'))
x = Math.pow(x, parseFactor()); // exponentiation
return x;
}
}.parse();
}
例子:
String gs = "100*5*0.003";
System.out.println(eval(gs));
相關推薦
計算字串中的簡單數學公式
今天公司產品提出需求。需要把計算公式放到伺服器,然後伺服器可動態化配置。所以找尋各種資料從而由此方法 程式碼如下: public static double eval(final String str) {return new Object() {int pos = -1,
[Swift通天遁地]五、高階擴充套件-(14)擴充套件String快速計算字串中的各種數學表示式
本文將演示快速計算字串中的各種數學表示式。 Gihub專案:【DDMathParser】 下載並解壓該專案。將資料夾【MathParser】算術解析包,拖動到自己的專案中。 點選【Finish】完成檔案拖動。 在匯入的專案中,【MathParser】->【Info.plist】資訊列表上滑鼠右鍵
如何用在Typora中新增數學公式?
文章目錄 0.新增公式 1.算式 1.1 分式 1.2 根式 1.3 上下標 1.4 向量 1.5 均值 1.6 極限
Python基礎訓練題-簡單數學公式
1.在100內,將遇到被7除餘數為0的都顯示PASS: 1 n=1 2 while n < 101: 3 if n % 7 == 0: 4 pass 5 print('pass') 6 else: 7 print(n) 8
計算字串中有多少個整數
計算使用者輸入內容中有多少個整數(以個位數為單位) content = input('請輸入一段內容:').strip() # 對輸入的內容進行去空格操作 雖然沒啥必要 count = 0 # 使用count來對出現次數計數 for i in content: # 對字串進行遍歷
LightOJ - 1163 Bank Robbery 簡單數學公式
題意: 原來有個數A,去掉他的最後一位 x 後,得到 AA,然後 A - AA = B; 給定 B ,要求 A; 思路: 根據條件可以得到:A - (A / 10)= B;&nbs
在Markdown中輸入數學公式(MathJax)
ColdRomantic 關注 2017.06.25 19:46* 字數 435 閱讀 21462評論 6喜歡 39 1 基本語法 1.1 呈現位置 正文(inline)中的LaTeX公式用$...$定
在Microsoft Word中輸入數學公式(待完善)
主要是在機器學習過程中使用到的一些公式 在one note 中 使用“Alt”+“=”即可鍵入公式 Microsoft公式 符號 對應於LATEX不同的公式 \doubleR \mathbb{R}
計算字串中每個字元出現的次數
var str="Hello World" function calc(str){ var hash=[]; for(var i=0;i<str.length;i++){ var key=str[i]; if(hash[k
Python 計算字串中所有數字的和,如:'12abc34de5f' => 12 + 34 + 5 => 51
Python 計算字串中所有數字的和,如:‘12abc34de5f’ => 12 + 34 + 5 => 51 解題思路: 可以把不是數字的元素轉換成’ '空格, 然後按空格切割成列表, 把列表中的數字元素找出相加 最後返回 s = '12abc34de5f' def sum
計算字串中含有的某個字元的個數
有如下方法: String testString = "a,b,c,d" 1)using apache commons int apache = StringUtils.countMatch
markdown 中 tex 數學公式和字元表示方法
上下標 上標符號為“^”、下標符號為“_” , 2^r , a_5 可同時輸入上下標(注意要先下標再上標) C_n^m 分式 簡單的可以用單斜槓 / 表示分數線
markdown中的數學公式簡要
在CSDN的部落格開始支援Markdown編輯器後,自己完全轉向了markdown編輯器。 Markdown的語法簡潔明瞭、學習容易,而且功能比純文字更強,因此用它寫部落格非常方便,還可以輕鬆的匯出PDF或者HTML的檔案。github上的wiki,各個pro
java使用charAt()方法計算字串中的重複字元
charAt()方法介紹 charAt() 方法用於返回指定索引處的字元。索引範圍為從 0 到 length() - 1。 例如:str.next().charAt(0);//獲取字串str中的第1個字元 str.next().charAt(9);//獲
計算字串中的指定的子串出現的次數
public class Test_String2 { public static void main(String[] args) { String s="abddabsscabdablab"; int count=0; int index=-1; //用於標識字元的下標位置
java計算字串中的大寫字母、小寫字母和非字母的個數
效果如圖: 程式碼如下: import java.util.Scanner; public class Test_String1 { public static void main(String[] args) { System.out.println("請輸入字串:");
3分鐘教會你用mathjax在csdn部落格中編輯數學公式
一、Mathjax簡介 MathJax是一個JavaScript引擎,用來顯示網路上的數學公式, MathJax有兩種插入公式的方式:一種是行中公式,另外一種是獨立公式,行中公式可以插入到一行文字中,獨立公式是單獨成行,行中公式插入方式是:$…$,獨立公式插入
#計算字串中所有數字和,連續當一個數字 (正則表示式,能不用就不用)
s='12as3d6f20ads01sd02' import re def he(s): c=re.compile('\d+')#建立正則表示式 l=c.findall(s)#返回所有匹配結果的列表 sum=0 #和 for i in l: #遍歷
java執行字串中的運算公式
public class runString { static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); public stat
編寫一個函式,計算字串中含有的不同字元的個數。字元在ACSII碼範圍內(0~127)。不在範圍內的不作統計。
輸入描述: 輸入N個字元,字元在ACSII碼範圍內。 輸出描述: 輸出範圍在(0~127)字元的個數import java.util.*; public class Main { public static void main(String[] args) {