You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,00
  • formatNumber(BigDecimal("1000"),Locale("de","CH"),3) 输出 1'000.000

原方案问题说明

  • 原有DecimalFormat方案硬编码了分隔符格式,无法适配不同Locale的千分位、小数点符号规则
  • 原有NumberFormat方案未配置小数位参数,默认使用Locale的默认小数位数,无法固定位数

内容的提问来源于stack exchange,提问作者Van Coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:00