2017-03-16 70 views

回答

8

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

+2

謝謝@ zsmb13,聰明的想法使用字節碼進行檢查。 – linqu

相關問題