documentation不包括用于将变量转换为字符串的语言环境。一个例子:
val d = 0.1234
val s = "$d"
威尔
s
是 0.1234
或 0,1234
这反射(reflect)了我机器的本地( 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
到。
关于format - kotlin 的字符串模板使用哪种语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42837477/