【发布时间】:2012-10-19 09:18:16
【问题描述】:
谁能帮我解决这个问题
String expr ="1.3*60";
//Integer xx=Integer.valueOf();
int i = Integer.parseInt(expr);
System.out.println("xx "+i);
当我编译时它显示数字格式异常,我在 java 中处于开始阶段,所以请帮我解决这个问题,非常感谢
【问题讨论】:
标签: java
谁能帮我解决这个问题
String expr ="1.3*60";
//Integer xx=Integer.valueOf();
int i = Integer.parseInt(expr);
System.out.println("xx "+i);
当我编译时它显示数字格式异常,我在 java 中处于开始阶段,所以请帮我解决这个问题,非常感谢
【问题讨论】:
标签: java
【讨论】:
Integer.parseInt 不计算数学表达式;它只是将整数的 String 格式转换为 Integer 类型。
例如:
int x = 5;
int y = Integer.parseInt("5");
x == y; // => true
要评估像 1.3 * 60 = ? 这样的数学表达式,您可能需要搜索 Java 数学解析/评估库。 (see this question, for example)
【讨论】:
String[] tokens = expr.split(delims);
...
int i = Integer.parseInt(expr);
您已经将字符串拆分为浮点数和整数,因此您需要将“tokens[0]”和“tokens[1]”字符串传递给 parseInt(),而不是原始字符串“expr”,尽管这些字符串中有一个是浮点数,所以我不确定这是否可行。
【讨论】:
检查此代码:
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 返回原语,我认为这是您需要的。
【讨论】:
如果您使用的是 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));
}
}
【讨论】: