format - kotlin 的字符串模板使用哪种语言环境?

标签 format kotlin

documentation不包括用于将变量转换为字符串的语言环境。一个例子:

val d = 0.1234
val s = "$d"

威尔s0.12340,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/

相关文章:

ruby - 如何将持续时间(以毫秒为单位)显示为格式正确的字符串?

Kotlin 泛型多个上限(作为 OR/union 构造)

Android资源编译失败(values.xml :200: error: invalid color)

html - 对段落和各种文本的正确 html 结构感到好奇

text - 文本注释的数据格式

python - 使用格式化将 time.struct_time 转换为字符串

java - 在为电子邮件 Intent 选择应用程序时,我的应用程序显示为一个选项

Android 和 Kotlin 协程 : inappropriate blocking method call

java - Android kotlin accountkit - 无法正常工作

c# - 使用字符串插值将字符串格式化为列