如何在Java/Kotlin中将$5,000,000这类格式化货币值转换为纯数字5000000?
带货币符号、千位分隔符的金额字符串转纯数字实现方案(Java/Kotlin)
核心思路
有两种常用实现路径:
- 基于系统提供的国际化格式化工具解析,适配不同地区的货币格式规则,通用性更强
- 直接清洗字符串过滤非数字字符,适合固定格式场景,实现更轻量
Java 实现
方案1:使用NumberFormat标准货币解析(推荐,通用性强)
import java.text.NumberFormat; import java.text.ParseException; import java.util.Locale; public class CurrencyConverter { public static long convertCurrencyToNumber(String currencyStr) throws ParseException { // 针对美元$格式使用US区域,其他货币可替换对应Locale NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US); Number number = currencyFormat.parse(currencyStr); return number.longValue(); } public static void main(String[] args) throws ParseException { String input = "$5,000,000"; long result = convertCurrencyToNumber(input); System.out.println(result); // 输出 5000000 } }
方案2:字符串清洗快速实现
如果场景固定只有$符号、逗号千位分隔符,可直接过滤非数字字符:
public class CurrencyConverter { public static long convertCurrencyToNumber(String currencyStr) { // 过滤所有非0-9的字符后转长整型 String pureNumStr = currencyStr.replaceAll("[^0-9]", ""); return Long.parseLong(pureNumStr); } }
注意:该方案默认金额为正整数,若存在小数位需保留
.字符,可将正则修改为[^0-9.]
Kotlin 实现
方案1:标准货币解析
import java.text.NumberFormat import java.util.Locale fun convertCurrencyToNumber(currencyStr: String): Long { val currencyFormat = NumberFormat.getCurrencyInstance(Locale.US) return currencyFormat.parse(currencyStr).toLong() } // 调用示例 fun main() { val input = "$5,000,000" val result = convertCurrencyToNumber(input) println(result) // 输出5000000 }
方案2:字符串清洗实现
fun convertCurrencyToNumber(currencyStr: String): Long { val pureNumStr = currencyStr.filter { it.isDigit() } return pureNumStr.toLong() }
注意:若需支持小数,可调整过滤逻辑保留
.字符,返回类型改为Double或BigDecimal即可
常见异常处理建议
- 输入字符串为空时需提前判空,避免解析异常
- 金额超出Long范围时,可改用BigDecimal存储解析结果
- 多货币场景下需动态切换Locale参数适配对应货币格式
内容的提问来源于stack exchange,提问作者nadhif Aini
相关产品推荐
相关产品推荐

