使用eval在DOT之后删除所有Java表达式

时间:2014-05-07 22:05:13

标签: java

我尝试了以下代码,但似乎我在这里遇到了一些问题。

通过使用上面的代码,我得到像

这样的结果
C:\temp>java -jar test.jar
2.0
6.0

C:\temp>

我怎么能只有“2”和“6”而不是我得到的?再次感谢!

2 个答案:

答案 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));
    }
}

Output (online demo)

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();
            }
        }
    }
}