2
documentation未涵蓋使用哪種語言環境將變量轉換爲字符串。舉個例子:哪些語言環境用於kotlin的字符串模板?
val d = 0.1234
val s = "$a"
將s
是0.1234
或0,1234
這反映了我的機器的本地(de_AT
)?
任何方法來調整它?
documentation未涵蓋使用哪種語言環境將變量轉換爲字符串。舉個例子:哪些語言環境用於kotlin的字符串模板?
val d = 0.1234
val s = "$a"
將s
是0.1234
或0,1234
這反映了我的機器的本地(de_AT
)?
任何方法來調整它?
TL; DR:你不能調整它。
如果您在使用字符串插值時查看字節碼,您會發現它在引擎蓋下使用StringBuilder
(這與現代Java編譯器使用+
級聯所做的相同)。
只是作爲一個例子,如果你把這個代碼:
val kt = "Kotlin"
println("hello $kt")
字符串模板操作看起來像這樣的字節碼(這是適度清晰):
LINENUMBER 8 L2
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init>()V
LDC "hello "
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ALOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString()Ljava/lang/String;
ASTORE 2
回到點。所以現在的問題是StringBuilder
在將double
附加到它時使用的問題。如果您查閱文檔,它將使用String.valueOf(double)
方法,該方法反過來使用Double.toString(double)
,您可以在其中找到文檔here以查看它如何格式化給定的值。簡短摘要:它使用.
作爲小數點分隔符,併爲您提供指數符號E
,用於非常小的和非常大的數字。
如果您想對其進行不同的格式化,最後一個鏈接中的文檔建議使用NumberFormat
。我也建議String.format
,你可以通過Locale
。
謝謝@ zsmb13,聰明的想法使用字節碼進行檢查。 – linqu