国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

香港云服务器
服務器之家 - 編程語言 - Java教程 - java實現字符串四則運算公式解析工具類的方法

java實現字符串四則運算公式解析工具類的方法

2021-05-17 15:22零度anngle Java教程

今天小編就為大家分享一篇java實現字符串四則運算公式解析工具類的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

項目中用到用戶定義運算公式進行就算的需求,這樣需要進行字符串四則運算解析,下面提供字符串公式四則運算解析與計算工具類,需要的同學可參考。

工具類如下:formulacalculator.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package org.nercita.bcp.record.util;
 
import java.util.arraylist;
import java.util.linkedlist;
 
/**
 * @author zhangwenchao
 * @since 2016-08-26
 * 公式計算的工具類
 */
public class formulacalculator {
    
    private static boolean isrightformat = true;
 
    public static double getresult(string formula){
        double returnvalue = 0;
        try{
            returnvalue = doanalysis(formula);
        }catch(numberformatexception nfe){
            system.out.println("公式格式有誤,請檢查:" + formula);
        }catch(exception e){
            e.printstacktrace();
        }
        if(!isrightformat){
            system.out.println("公式格式有誤,請檢查:" + formula);
        }
        return returnvalue;
    }
 
    private static double doanalysis(string formula){
        double returnvalue = 0;
        linkedlist<integer> stack = new linkedlist<integer>();
        int curpos = 0;
        string beforepart = "";
        string afterpart = "";
        string calculator = "";
        isrightformat = true;
        while(isrightformat&&(formula.indexof('(') >= 0||formula.indexof(')') >= 0)){        
            curpos = 0;
            for(char s : formula.tochararray()){
                if(s == '('){ 
                    stack.add(curpos);
                }else if(s == ')'){ 
                    if(stack.size() > 0){ 
                        beforepart = formula.substring(0, stack.getlast()); 
                        afterpart = formula.substring(curpos + 1); 
                        calculator = formula.substring(stack.getlast() + 1, curpos); 
                        formula = beforepart + docalculation(calculator) + afterpart; 
                        stack.clear(); 
                        break
                    }else
                        system.out.println("有未關閉的右括號!"); 
                        isrightformat = false
                    }
                }
                curpos++;
            }
            if(stack.size() > 0){
                system.out.println("有未關閉的左括號!");
                break;
            }
        }
        if(isrightformat){
            returnvalue = docalculation(formula);
        }
        return returnvalue;
    }
    
    private static double docalculation(string formula) {
        arraylist<double> values = new arraylist<double>();
        arraylist<string> operators = new arraylist<string>();
        int curpos = 0;
        int prepos = 0;
        int minus = 0;     
        for (char s : formula.tochararray()) {
             if ((s == '+' || s == '-' || s == '*' || s == '/') && minus !=0 && minus !=2) {                                            
                 values.add(double.parsedouble(formula.substring(prepos, curpos).trim()));             
                 operators.add("" + s);                
                 prepos = curpos + 1;               
                 minus = minus +1;
             }else{             
                 minus =1;              
             }
             curpos++;     
        }
        values.add(double.parsedouble(formula.substring(prepos).trim()));
        char op;
        for (curpos = 0; curpos <= operators.size() - 1; curpos++) {                        
            op = operators.get(curpos).charat(0);
            switch (op) {
            case '*':
                values.add(curpos, values.get(curpos) * values.get(curpos + 1));
                values.remove(curpos + 1);
                values.remove(curpos + 1);
                operators.remove(curpos);
                curpos = -1;
                break;
            case '/':
                values.add(curpos, values.get(curpos) / values.get(curpos + 1));
                values.remove(curpos + 1);
                values.remove(curpos + 1);
                operators.remove(curpos);
                curpos = -1;
                break;
            }
        }
        for (curpos = 0; curpos <= operators.size() - 1; curpos++) {
            op = operators.get(curpos).charat(0);
            switch (op) {
            case '+':
                values.add(curpos, values.get(curpos) + values.get(curpos + 1));
                values.remove(curpos + 1);
                values.remove(curpos + 1);
                operators.remove(curpos);
                curpos = -1;
                break;
            case '-':
                values.add(curpos, values.get(curpos) - values.get(curpos + 1));
                values.remove(curpos + 1);
                values.remove(curpos + 1);
                operators.remove(curpos);
                curpos = -1;
                break;
            }
        }
        return values.get(0).doublevalue();
    }
 
    public static void main(string[] args) {    
        system.out.println(formulacalculator.getresult("3-(4*5)+5"));  
        system.out.println(formulacalculator.getresult("7/2-(-4)"));           
        system.out.println(formulacalculator.getresult("1287763200000-1276272000000")/(3600*24*1000));
    }
    
}

支持四則運算,同時支持負數解析。

另附,小數數據保留位數工具類,setnumberprecision.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package org.nercita.bcp.record.util;
 
import java.text.decimalformat;
 
/**
 
 * @author zhangwenchao
 * 小數點 精度的工具類
 */
public class setnumberprecision {
        
    public static string setnumberprecision(double x,int number){       
        string p="#########0";      
        if(number==0){          
            p="#########0";     
        }else{       
            p="#########0.";         
            for(int i=0;i<number;i++){//for的巧妙運用       
                p=p+"0";         
            }       
        }        
        decimalformat f = new decimalformat(p);          
        string s = f.format(x).tostring();       
        return s;       
    }
    
}

以上這篇java實現字符串四則運算公式解析工具類的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/zmx729618/article/details/52328377

延伸 · 閱讀

精彩推薦
979
主站蜘蛛池模板: 国产一区精品在线 | 欧美日韩国产一区二区三区 | 理论电影在线 | 日韩在线播放一区二区 | 成年人在线观看免费视频 | yiren22成人网| 中文字幕在线播放一区 | 婷婷毛片| 亚洲免费视频网站 | 在线亚洲电影 | 视频一区在线播放 | 亚洲国产精品无卡做爰天天 | 欧美一区二区三区在线观看 | 亚州国产精品视频 | 色乱码一区二区三区网站 | 国产精品久久 | 99久久免费精品 | 毛片黄片免费观看 | 在线播放一区 | 欧美日韩一区二区三区在线观看 | 日韩一区免费在线观看 | www.国产精| 91精品国产乱码久久久久久久久 | 欧美精品久久久 | 国产成人精品一区二区三区四区 | 久久男人天堂 | 中文字幕一区二区三区四区五区 | 最近2018年手机中文字幕版 | 北条麻妃一区二区三区在线观看 | 日韩一区二区三区四区 | 天天操人人干 | 日本一区二区不卡 | 亚洲精品在线中文字幕 | 亚洲一区二区久久 | 国产日韩精品一区二区 | 超碰一区二区三区 | 亚洲精品福利在线 | 日韩五码 | 欧美一区二区三 | 久久人人爽爽爽人久久久 | 国产精品1区 |