Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的格式字符串_Java_Number Formatting - Fatal编程技术网

java中的格式字符串

java中的格式字符串,java,number-formatting,Java,Number Formatting,如何格式化带逗号的字符串,使其以curreny格式显示 假设传入字符串是一个大数字。例如: “12345679012456789012345678900123456” 我希望结果如下: “123456789012134567890123456” Java中的DecimalFormat对格式化大数字有限制。95%的问题都是通过澄清您的需求来解决的。让我们过滤掉那些绝对不是需求的东西。“传入字符串是一个大数字”-该语句永远不会成立。它是一根绳子吗?如果是,那么它是一个字符串,而不是一个数字。这一区别

如何格式化带逗号的字符串,使其以curreny格式显示

假设传入字符串是一个大数字。例如:

“12345679012456789012345678900123456”

我希望结果如下:

“123456789012134567890123456”


Java中的
DecimalFormat
对格式化大数字有限制。

95%的问题都是通过澄清您的需求来解决的。让我们过滤掉那些绝对不是需求的东西。“传入字符串是一个大数字”-该语句永远不会成立。它是一根绳子吗?如果是,那么它是一个字符串,而不是一个数字。这一区别很重要。我假设这个问题的答案是“是”

既然有了字符串,为什么要使用十进制格式?字符串与十进制数格式化程序有什么关系?与您试图解决的问题无关。我将把解决问题的正确方法的决定权留给你——毕竟,我对你的要求的推测可能是不正确的

重申一下,这里有一些绝对不正确的东西: -你有一个字符串,这是一个大数字“ -DecimalFormat对“大数字”有异议——这是一个基于错误理解得出的未经证实的结论

System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
输出
35634646

这样就可以了

double formatThis = Double.parseDouble(yourNumber);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(formatThis));

您应该能够使用下面发布的表达式实现所需的目标:

(?n:(^\$?(?!0,?\d)\d{1,3}(?=(?<1>,)|(?<1>))(\k<1>\d{3})*(\.\d\d)?)$)
(?n:(^\$?(?!0,?\d)\d{1,3}(?=(?,)|(?)(\k\d{3})*(\.\d\d)?)$)
试试这个

String input = "12345678901234567890123456";
String output = String.format("%,d", new BigInteger(input));
System.out.println(output);
// -> 12,345,678,901,234,567,890,123,456

我认为你不应该问这种直接的问题,搜索很简单-…最好尝试一下,看看你遇到了什么问题。你为什么不到处搜索一下呢?谢谢你的帮助这张打印
1234567901234 567800000000,00
?@YCF_L,这张打印
1234567901245680000000.00
,任何怀疑?不,我不知道在我的系统中它打印这个
1234567 901 234 567 800000,00
我也不知道,为什么你的系统会这样打印,这可能是个好问题,发布它,很高兴看到。你可能需要定义本地,我得到这个,而不是你的输入看看这里你能包括一些这个表达式的使用示例吗锡安?有人能解释一下为什么正则表达式会解决字符串格式问题吗?这不适用于OP number
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(“1234567912345678900123456”);
@hamzox-Answer可以“接受”“只有在问题至少15分钟前提出。同样,在目前的形式下,你们并没有像OP所说的那个样处理大数字。您可以在这里使用BigInteger。等等,我正在修改我的答案。换句话说,您可以将
.format(35634646)
替换为
.format(新的BigInteger(“1234567801234567890123456”)
。使用
字符串.format(Locale.US,%,d),新的BigInteger(输入));
以逗号代替空格。@Pshemo,这会引发一个异常:
java.lang.NumberFormatException:对于输入字符串:“012”‌​3456“
@davidxxx您的字符串中有一些介于2和3之间的不可打印字符。请查看
数组的结果。toString(“012‌​它是[48,49,50,8204,8203,51,52,53,54]所以你有了
8204
这是和
8203
这是。@Pshemo你完全正确。非常感谢你的解释。我在双击文本时也注意到了这一点,它只选择了第一部分,就好像字符串被拆分为2一样。我在IDE上从未遇到过这种行为。