首页 > 解决方案 > 'java.lang.NumberFormatException: Invalid double' 用于欧洲语言,使用 Kotlin

问题描述

我为此找到的每个解决方案都使用 java 而不是 Kotlin,请有人帮忙吗?我写了一个应用程序,我只是想翻译到一些欧洲国家,但是数学部分正在下降,因为德国人、法国人等使用逗号而不是句号。我无法弄清楚如何使用此处的解决方案来解决此问题。

.kt 文件的一部分:

import java.math.RoundingMode
import java.text.DecimalFormat
...
val df = DecimalFormat("#.##")
df.roundingMode = RoundingMode.CEILING
val lengthCalc = 0.01658
val length = df.format(lengthCalc)

任何帮助表示感谢

编辑:我看过这里:如何将 DecimalFormat 的小数分隔符从逗号更改为点/点?但正如我最初所说,所有解决方案都适用于 Java,而不是 Kotlin

标签: javaandroidandroid-studiokotlin

解决方案


我目前无法尝试,但类似

val otherSymbols = DecimalFormatSymbols()
otherSymbols.setDecimalSeparator(',')
otherSymbols.setGroupingSeparator('.')
DecimalFormat df = DecimalFormat("#.##", otherSymbols)
df.roundingMode = RoundingMode.CEILING
val lengthCalc = 0.01658
val length = df.format(lengthCalc)

应该做的伎俩。您需要为欧洲使用十进制格式符号,因此小数使用逗号,千位使用句号。

在语言环境基础上执行此操作的另一种方法是使用 NumberFormat 并将其转换为 DecimalFormat

val df = NumberFormat.getNumberInstance(currentLocale) as DecimalFormat
df.applyPattern("#.##")
...
df.format(lengthCalc)

推荐阅读