如何在 Java 中将语言环境格式的数字转换为 BigInteger?

Posted

技术标签:

【中文标题】如何在 Java 中将语言环境格式的数字转换为 BigInteger?【英文标题】:How to convert locale formatted number to BigInteger in Java? 【发布时间】:2012-08-23 23:44:06 【问题描述】:

我搜索了很多,但没有任何帮助:(假设我需要将 12.090.129.019.201.920.192.091.029.102.901.920.192.019.201.920(葡萄牙语组分隔符:.)转换为 BigInteger 值。如何进行转换?我尝试使用 NumberFormat、DecimalFormat 并没有任何效果,或者我的方法不对:(

【问题讨论】:

你是怎么传入的?是字面意思,还是字符串? 当我通过新的BigInteger( “12090129019201920192091029102901920192019201920”)工作得很好,但新的BigInteger( “12.090.129.019.201.920.192.091.029.102.901.920.192.019.201.920”)产生一个异常(如预期) .我传递了一个字符串,因为我正在实现一个字符串转换器来转换来自用户表单的输入。是否需要提供一个 Locale 实例来格式化我认为...但我不知道该怎么做 【参考方案1】:

获取葡萄牙语LocaleNumberFormat 实例,然后获取带有它的号码的parse。这还将处理特定于语言环境的小数分隔符。

NumberFormat nf = NumberFormat.getNumberInstance(new Locale("pt", "PT"));
DecimalFormat df = (DecimalFormat)nf;
df.setParseBigDecimal(true);
BigDecimal decimal = (BigDecimal)df.parse("12.090.129.019.201.920.192.091.029.102.901.920.192.019.201.920");
BigInteger big = decimal.toBigInteger();

DEMO.

【讨论】:

【参考方案2】:

删除分隔符不是更直接吗? Java 内部不关注这些。

String num = "2.090.129.019.201.920.192.091.029.102.901.920.192.019.201.920";
BigInteger bigInt = new BigInteger(num.replaceAll("\\.", ""));

如果您需要它,那么您可以使用 NumberFormat.format() 来取回该值。

【讨论】:

一旦切换区域设置(例如从葡萄牙到美国),这将中断。 Joao 的语言环境 NumberFormat 要好得多。

以上是关于如何在 Java 中将语言环境格式的数字转换为 BigInteger?的主要内容,如果未能解决你的问题,请参考以下文章

在EXCEL中将数字转换为文本时怎样在单元格前边自动加0

如何在熊猫中将 4 位数字转换为小时:分钟时间格式

如何在 Swift 中将多字符数字格式转换为可读的字符串?

在r中将多个列从字符转换为数字格式

如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?

如何在 Delphi 中将浮点数转换为字符串,指定有效数字,而不是十进制数字(而不是 G 格式)