在Android中实现适当的单位小数位格式化器

huangapple go评论59阅读模式
英文:

Implement Appropriate Single Decimal Place Formatter in Android

问题

我需要创建一个小数格式化程序,可以显示最多1位小数,并且带有与Locale兼容的分隔符。

例如:

0 --> 0.0或0,0
0.0 --> 0.0或0,0
4 --> 4.0或4,0
3.5 --> 3.5或3,5

我需要在Kotlin中为Android实现它。我最初尝试使用DecimalFormat,但当输入为"0.0"时,这个解决方案不起作用。

有没有更适合Android的方法?

英文:

I need to create a decimal formatter that would display up to 1 decimal digit, with a Locale-compatible seperator.

For example:

0 --> 0.0 or 0,0
0.0 --> 0.0 or 0,0
4 --> 4.0 or 4,0
3.5 --> 3.5 or 3,5

I need to implement it in Kotlin for Android. I tried initially using DecimalFormat but this solution doesn't work when input is "0.0"

 DecimalFormat("#.0").format(inputNum.toDouble())

What's more appropriate Android-ish way?

答案1

得分: 1

在尝试了各种解决方案后,我找到了使用NumberFormatter而不是DecimalFormat作为推荐方法的适当方法。

这个API提供了比android.icu.text.DecimalFormat更多的功能,面向ICU的新用户。

private fun formatNumber(number: Double) = NumberFormatter.with()
    .decimal(NumberFormatter.DecimalSeparatorDisplay.ALWAYS)
    .precision(Precision.fixedFraction(1))
    .locale(Resources.getSystem().configuration.locales.get(0))
    .format(number)
    .toString()
英文:

After trying various solutions, I figured out the appropriate approach using NumberFormatter instead of DecimalFormat as a recommended approach.

This API offers more features than android.icu.text.DecimalFormat and is geared toward new users of ICU.

private fun formatNumber(number: Double) = NumberFormatter.with()
.decimal(NumberFormatter.DecimalSeparatorDisplay.ALWAYS)
.precision(Precision.fixedFraction(1))
.locale(Resources.getSystem().configuration.locales.get(0))
.format(number)
.toString()

huangapple
  • 本文由 发表于 2023年3月31日 20:52:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/75898761.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定