0

任何机构都可以帮我解决这个问题

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

当我编译这个时它显示数字格式异常,我在java的开始阶段,所以请帮我解决这个问题,非常感谢

4

5 回答 5

7

Integer.parseInt不计算数学表达式;它只是将整数的字符串格式转换为整数类型。

例如:

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

x == y; // => true

要评估诸如 之类的数学表达式1.3 * 60 = ?,您可能需要搜索 Java 数学解析/评估库。(例如,请参阅此问题

于 2012-10-30T03:20:40.440 回答
3
"1.3*60";

不是有效的integer.

Integer.parseInt(...);只能解析有效的整数

如果您想使用表达式评估引擎。看到这个这个

于 2012-10-30T03:19:16.183 回答
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));
    } 
}
于 2012-10-30T07:10:55.003 回答
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 返回原语,我认为这是您需要的。

于 2012-10-30T03:42:42.180 回答
0
String[] tokens = expr.split(delims);
...
int i = Integer.parseInt(expr);

您已经将字符串拆分为 float 和 int,因此您需要将“tokens[0]”和“tokens[1]”字符串传递给 parseInt() 而不是原始字符串“expr”,尽管在这些字符串是一个浮点数,所以我不确定这是否会起作用。

于 2012-10-30T03:26:29.690 回答