哪个语言环境用于kotlin的字符串模板?

时间:2017-03-16 14:51:29

标签: format kotlin

documentation未涵盖用于将变量转换为字符串的区域设置。一个例子:

val d = 0.1234
val s = "$d"

s 0.12340,1234会反映我的机器本地(de_AT)吗?

有任何调整方法吗?

1 个答案:

答案 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>