Kotlin如何实现指定Locale和固定小数位数的数字本地化格式化
实现方案
直接基于NumberFormat配置固定小数位参数即可满足需求,NumberFormat本身自带完整的本地化适配能力,只需要额外指定最小、最大小数位为目标值即可实现固定小数位数的效果:
import java.math.BigDecimal import java.util.Locale import java.text.NumberFormat fun formatNumber(number: BigDecimal, locale: Locale, decimalPlaces: Int): String { return NumberFormat.getNumberInstance(locale).apply { // 固定小数位数,保证展示的小数位不多不少正好等于传入值 minimumFractionDigits = decimalPlaces maximumFractionDigits = decimalPlaces // 可按需调整舍入模式,避免截断小数时报错 roundingMode = java.math.RoundingMode.HALF_UP }.format(number) }
效果验证
运行你给出的测试代码,输出完全符合预期:
formatNumber(BigDecimal("1000"),Locale("de","DE"),2)输出1.000,00formatNumber(BigDecimal("1000"),Locale("de","CH"),3)输出1'000.000
原方案问题说明
- 原有
DecimalFormat方案硬编码了分隔符格式,无法适配不同Locale的千分位、小数点符号规则 - 原有
NumberFormat方案未配置小数位参数,默认使用Locale的默认小数位数,无法固定位数
内容的提问来源于stack exchange,提问作者Van Coding
相关产品推荐
相关产品推荐

