我尝试了以下代码,但似乎我在这里遇到了一些问题。
通过使用上面的代码,我得到像
这样的结果C:\temp>java -jar test.jar
2.0
6.0
C:\temp>
我怎么能只有“2”和“6”而不是我得到的?再次感谢!
答案 0 :(得分:0)
"js"
脚本引擎不进行转换:它将每个数字视为double
。
这样,您就必须格式化那些results
个对象(因为它们是double
s)。一种可能的方法是使用java.text.DecimalFormat
类:
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String[] array = {"-1+3", "10-4"};
DecimalFormat df = new DecimalFormat("#.#");
StringBuilder result = new StringBuilder(array.length);
for (int i = 0; i < array.length; i++) {
Object results = engine.eval(array[i]);
System.out.println(df.format(results));
}
}
2
6
答案 1 :(得分:0)
JavaScript没有整数,只有数字和数字是浮点数。下面的代码利用Java的Formatter(http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html)来声明输出应该没有小数位。如果要将其转换为int,则可以利用Number具有intValue()方法的事实。
如果您遇到JavaScript,那么您应该自己阅读Crockford的#14; JavaScript,Good Parts&#34;。他很好地介绍了JavaScript边缘案例:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JavaScriptEval {
public static void main( String[] args ) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName( "js" );
String[] array = { "-1+3", "10-4" };
for ( int i = 0; i < array.length; i++ ) {
try {
Object results = engine.eval( array[i] );
// http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html
String resultsAsString = String.format( "%.0f", results );
// Naked cast can get you in trouble
int resultsAsint = ( (Number) results ).intValue();
System.out.println( "results_as_string: " + resultsAsString + ", results_as_int: " + resultsAsint );
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
}