2014-04-03 171 views
0

我是Java新手,所以這可能是一個簡單的問題。將字符串轉換爲浮點Java

我已經做了一個計算器,用戶點擊按鈕,它將文本輸入到JTextField

我已使用.getText()方法並將其保存到String

使用System.out.println()我看到String是「8 * 7 * 7-8/4」,很明顯,如果我可以執行此操作並獲得答案390,那麼這比分離它容易得多比看起來更復雜。

感謝馬特

+1

你可以使用一個堆棧轉換綴以後綴來獲得正確的操作順序。 –

+0

http://stackoverflow.com/a/7552675/2282538 – Tyler

+0

字符串浮動:http://stackoverflow.com/questions/7552660/java-convert-float-to-string-and-string-to-float –

回答

1

您可以直接使用內置的Java腳本引擎實際上計算表達式"8*7*7-8/4"。看看this post.

另請參閱this codereview post,它解釋瞭如何評估字符串中存在的數學表達式的一些優點。

+0

我指的是'javax.script.ScriptEngineManager'和'javax.script.ScriptEngine'類,如我給出的帖子的鏈接所示。它內置在JDK 1.6中。 – anirudh

0

你能做到這一點,以獲得一個字符串的單精度浮點值:

Float.valueOf(string); 

所以,你可以做到這一點,只要用戶輸入一個數字:

//method when user inputs a number, the String input will be what the user adds 
float number = Float.valueOf(input); 

此外,您可以做這樣的事情:

ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
String input = "40+2"; 
System.out.println(engine.eval(input)); 

從以上代碼:Evaluating a math expression given in string form

+0

嗨,我試過這個,我得到 異常在線程「AWT-EventQueue-0」java.lang.NumberFormatException:對於輸入字符串:「3 * 6」 –

+0

@ user3494178第一個代碼,'Float.valueOf(string); ',只有在你使用單個數字時纔有效,比如'5.6'或'8'。像「8 + 3」和「5.6 * 22.1」這樣的東西在這裏不起作用。然而,使用'ScriptEngineManager mgr = new ScriptEngineManager();'的最底層代碼會爲你評估諸如'3 * 6'或'8 + 5'的表達式 – Jojodmo

0

添加jar文件jav8-JSR223-雙贏amd64-0.6到類路徑Java8或相應的jar按JDK版本並寫入下面的代碼

String val = "8*7*7-8/4";//make it to get from field.getText() 

ScriptEngineManager engineManager = new ScriptEngineManager(); 
ScriptEngine engine = engineManager.getEngineByName("JavaScript"); 
Object result = engine.eval(val); 

System.out.println(result);