私はこのコードを持っている:StringからDoubleへの変換はどうしたらいいですか?
fun main(args:Array<String>){
var value:String = "4.0*5.0"
var value_double = value.toDouble()
print(value_double)
}
私はエラーを得たが、私は20.0を取得しない理由を私は理解していませんか?
私はこのコードを持っている:StringからDoubleへの変換はどうしたらいいですか?
fun main(args:Array<String>){
var value:String = "4.0*5.0"
var value_double = value.toDouble()
print(value_double)
}
私はエラーを得たが、私は20.0を取得しない理由を私は理解していませんか?
String.toDouble()
は、乗算やその他の算術演算をサポートしていません。実際、それは倍精度解析以外の何かをサポートしていません。
したがって、20.0
を取得する唯一の方法は、数字を別々に解析してから操作を行うことです。
val value_double = "4.0".toDouble() * "5.0".toDouble()
"4.0*5.0"
は、二重にに変換することはできませんが、"4.0"
ので"5.0"
ができますすることができます。 20.0
の結果を望むのであれば、あなたは
val value_double = "4.0".toDouble() * "5.0".toDouble()
print(value_double)
それが静的にプログラムされているので、@voddanからソリューションは、好適であるそれらを掛け、個別にして、両方の文字列を変換する必要があります。しかし何らかの理由で"4.0*5.0"
を評価して静的に行う必要がない場合(何らかの理由で文字列として渡され、内容についてわからないため)、スクリプトエンジンを使用するよりも。詳細はDynamically evaluating templated Strings in Kotlin
ですが、最後の手段としてこのエンジンを使用してください。あなたが選択肢を持っている場合は、それがより安全であるため、常に静的バリアントを優先します。
でも重複していますが、[ScriptEngine](http://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngine)で数式をJavaで簡単に行うことができます'valet = ScriptEngineManager()。getEngineByName(" nashorn ")。eval(" 4.0 * 5.0 ")をDoubleとして返します。 –
今は' KotlinScriptEngine'を使用することをお勧めしません。非常に**ゆっくり**そして**多くのリソースを無駄にする**。将来的にはもっと速くなるかもしれない。 –