2017-12-01 9 views
0
Scanner in = new Scanner(System.in); 
//String s = in.next(); 
String s1; 
String x = in.next(); 
String s2; 
String s3= "3*4.4+pow(sqrt(sin(x)),3)"; 
String s4; 
String s5; 

s1 = s3.replace("sin(x)","Math.sin(x)").replace("cos(x)","Math.cos(x)").replace("tan(x)","Math.tan(x)").replace("sqrt","Math.sqrt").replace("pow(","Math.pow("); 
s2 = s1.replace("x", x); 
System.out.println(s2); 


ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
s4 = (String) engine.eval(s2); 
s5 = String.format("%.2f",s4); 

System.out.println(s5); 

ここは私のJavaコードです。私はs4変数で私の表現の答えを取っているし、その後、小数点以下2桁まで修正したいと思います。私の答えはStringデータ型であるため、String.format()メソッドを使用しましたが、動作しません。以前はDecimalFormatオブジェクトを使用していましたが、私の答えはStringになっていたので役に立たなかったです。コードはString.format()メソッドなしで正常に動作します。誰でもこれを修正できますか?Javaで小数点以下2桁の文字列を印刷する方法

+0

この質問は答えているように見えます[ここでprintfを使って](https://stackoverflow.com/a/2538803/382936)。 –

答えて

0

s5 = String.format("%.2f",s4); 

を交換して、私は次の2行のコードを変更し、それが動作します:

s4 = "" + engine.eval(s2); 
s5 = String.format("%.2f",Double.parseDouble(s4)); 
+0

ありがとうございました。それは働いています:) –

+0

うれしい嬉しいです –

+1

あなたは 's4 =(String)engine.eval(s2)'を実行するとClassCastExceptionがあると言いますか?どのクラスが* from *のキャストですか?おそらくダブルです。だから、それをStringに変更し、それを2倍に解析する必要はありません! 'String.format("%。2f "、(Double)engine.eval(s2))'を実行するだけです。 – DodgyCodeException

0

あなたはClassCastExceptionが発生してはIllegalArgumentException を持って

s5 = String.format("%.2f", Double.parseDouble(s4)); 
関連する問題