【问题标题】:'java.lang.NumberFormatException: Invalid double' for European languages, using Kotlin [duplicate]'java.lang.NumberFormatException: Invalid double' 用于欧洲语言,使用 Kotlin [重复]
【发布时间】:2019-12-26 23:46:58
【问题描述】:

我为此找到的每个解决方案都使用 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)

感谢任何帮助

编辑:我看过这里:How to change the decimal separator of DecimalFormat from comma to dot/point? 但正如我最初所说,所有解决方案都是针对 Java,而不是 Kotlin

【问题讨论】:

  • 您使用 Kotlin 的事实在这里并没有真正的区别:您使用的是 Java API,因此副本中的答案适用,因为它们更多地是关于 API 的使用而不是关于语言(Java 与 Kotlin)。

标签: java android android-studio kotlin


【解决方案1】:

我目前无法尝试,但类似

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)

【讨论】:

  • DecimalFormatSymbols()是否默认使用当前语言环境?
  • 谢谢威廉,但是 Code-Apprentice 是正确的,它需要在任何地方工作
  • @Maff 我原来的评论可能不正确,所以我删除了它。请参阅我的新评论。我建议研究DecimalFormatSymbols 的工作原理。
  • 非常感谢威廉,标记为答案,非常感谢
  • @Maff 我已经更新了更简单的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多