documentation未涵盖用于将变量转换为字符串的区域设置。一个例子:
val d = 0.1234
val s = "$d"
s
0.1234
或0,1234
会反映我的机器本地(de_AT
)吗?
有任何调整方法吗?
答案 0 :(得分:9)
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
作为小数点分隔符,并为非常小和非常大的数字提供rep
的指数表示法。
如果您想要以不同方式格式化,最后一个链接中的文档建议使用NumberFormat
。我还建议您String.format
,您可以将Locale
传递给。{/ p>