2012-10-30 90 views
0

任何機構可以幫我解決這個問題Java類型轉換到整數

String expr ="1.3*60"; 
//Integer xx=Integer.valueOf(); 
int i = Integer.parseInt(expr); 
System.out.println("xx "+i); 

,當我編譯這個就說明數字格式例外,我在Java的起步階段,所以請幫助我出來解決這個,謝謝一噸

回答

3
"1.3*60"; 

是不是一個有效的integer。如果你想使用表達式求值引擎

Integer.parseInt(...);可以解析唯一有效的整數

。請參閱thisthis

+0

如何解決這個問題? – SANJAY

+0

然後wat是這個解決方案 – SANJAY

+0

你想得到什麼,表達結果? – kosa

5

Integer.parseInt不評估數學表達式;它只是將整數的字符串格式轉換爲整數類型。

例如:

int x = 5; 
int y = Integer.parseInt("5"); 

x == y; // => true 

評估數學表達式像1.3 * 60 = ?,你可能想搜索Java的數學分析/評估文庫。 (see this question, for example

0
String[] tokens = expr.split(delims); 
... 
int i = Integer.parseInt(expr); 

你已經分割字符串轉換爲一個float和一個int,所以你需要通過你的「令牌[0]」和「令牌[1]」串入parseInt函數(),而不是你的原始字符串「expr」,儘管這些字符串是一個浮點數,所以我不確定這是否可行。

0

檢查這個代碼:

String expr ="1.3*60"; 
String[] tokens = expr.split("\\*"); 
float j = Float.parseFloat(tokens[0]); 
float k = Float.parseFloat(tokens[1]); 
System.out.println(j); 
System.out.println(k); 
System.out.println(j*k); 

所以,首先你必須使用正規表示法(我不會談論)來標記,所以這是你不得不分割的一部分。然後,因爲你解析的一些數字不是整數,所以你應該使用浮點數或相應的類型,或者使用try/catchs或其他來忽略非int值。最後,valueOf返回對象,而parseX返回基元,我認爲這是你需要的。

+0

是的,我同意,表達式將從數據庫動態加載,它可能是expr =(1.3 + 60-80),所以任何解決方案的動態表達式 – SANJAY

+0

然後,你將不得不添加更多的邏輯同時考慮所有可能的運營商及其優先級,分割您的令牌。所以你的代碼可能和要解析的動態表達式一樣複雜。你可以用*,/,+和 - 分割,然後遍歷生成的數組。反過來說,使用js引擎更容易,但資源成本更高。 – pamo

0

如果您使用的是JDK 1.6,你可以使用內置的JavaScript引擎來評估表達:

import javax.script.ScriptEngineManager; 
import javax.script.ScriptEngine; 

public class expressionEvaluate{ 
    public static void main(String[] args) throws Exception{ 
    ScriptEngineManager sem = new ScriptEngineManager(); 
    ScriptEngine scriptEngine = sem.getEngineByName("JavaScript"); 
    String expr = "1*3+5"; 
    System.out.println(scriptEngine.eval(expr)); 
    } 
}