2017-07-16 24 views
-2

我有這樣的代碼:從String到Double的轉換不起作用?

fun main(args:Array<String>){ 

var value:String = "4.0*5.0" 
var value_double = value.toDouble() 
print(value_double) 

} 

我得到了一個錯誤,但我不明白爲什麼我沒有得到20.0?

+0

即使是重複的,但我可以告訴你可以通過[ScriptEngine的(http://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngine做簡單的Java中的數學表達式html的),例如:。EVAL'VAL結果= ScriptEngineManager()getEngineByName所( 「犀牛」)( 「4.0×5.0」)作爲Double' –

+0

我不建議你使用'KotlinScriptEngine'現在,因爲它是非常**緩慢**和**浪費**許多資源。也許未來它可能會更快。 –

回答

4

String.toDouble()不支持乘法或其他算術運算。事實上,除解析雙打外,它不支持任何其他功能。

因此,只有這樣,才能20.0單獨解析數字,然後對它們進行操作。

val value_double = "4.0".toDouble() * "5.0".toDouble() 
1

"4.0*5.0"不能被轉換到爲雙但"4.0"可以這樣可以"5.0"。所以,如果想要的20.0結果,你將不得不兩個字符串轉換成單獨再乘以他們

val value_double = "4.0".toDouble() * "5.0".toDouble() 
    print(value_double) 
2

從@voddan的解決方案是最好的,因爲它是靜態編程。但是,如果你出於某種原因需要評估"4.0*5.0",並且沒有真正的機會靜態執行它(因爲它以某種方式作爲字符串傳遞給你,並且你不知道有關內容),那麼你可以使用腳本引擎。有關詳情請參閱Dynamically evaluating templated Strings in Kotlin

但請只使用這個引擎作爲最後的手段。如果您有選擇的話,請始終選擇靜態變量,因爲它更節省。