如何格式化字符串编号以使用逗号和圆形?

She*_*lam 131 java string numbers decimal number-formatting

格式化以下作为字符串给出的数字的最佳方法是什么?

String number = "1000500000.574" //assume my value will always be a String
Run Code Online (Sandbox Code Playgroud)

我希望这是一个值为String的字符串: 1,000,500,000.57

我该如何格式化呢?

Nul*_*ion 241

你可能想看看这个DecimalFormat班级; 它支持不同的语言环境(例如:在某些国家/地区将被格式化为1.000.500.000,57相反).

您还需要将该字符串转换为数字,这可以通过以下方式完成:

double amount = Double.parseDouble(number);
Run Code Online (Sandbox Code Playgroud)

代码示例:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));
Run Code Online (Sandbox Code Playgroud)


Gre*_*g H 40

这也可以使用String.format()来完成,如果您在一个字符串中格式化多个数字,这可能更容易和/或更灵活.

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);
Run Code Online (Sandbox Code Playgroud)

对于格式字符串"%,.2f" - ","表示使用逗号分隔数字组,".2"表示舍入到小数点后的两个位置.

有关其他格式选项的参考,请参阅https://docs.oracle.com/javase/tutorial/java/data/numberformat.html


Aar*_*rup 37

将String转换为数字后,即可使用

// format the number for the default locale
NumberFormat.getInstance().format(num)
Run Code Online (Sandbox Code Playgroud)

要么

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
Run Code Online (Sandbox Code Playgroud)

  • 啊,没关系,发现它:`new DecimalFormat("0.##",DecimalFormatSymbols.getInstance(locale))` (6认同)

Jer*_*ilo 11

我已经创建了自己的格式化工具.这对于处理格式化非常快,同时为您提供了许多功能:)

它支持:

  • 逗号格式例如1234567变为1,234,567.
  • 前缀为"千(K),百万(M),十亿(B),万亿(T)".
  • 精度为0到15.
  • 精确重新调整大小(意味着如果你想要6位精度,但只有3个可用数字,它会强制它为3).
  • 前缀降低(意味着如果您选择的前缀太大,则会将其降低到更合适的前缀).

代码可以在这里找到.你这样称呼它:

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}
Run Code Online (Sandbox Code Playgroud)

我还应该指出这不处理小数支持,但对整数值非常有用.上面的例子将显示"1.23M"作为输出.我可能可能添加十进制支持,但是没有看到太多使用它从那以后我不妨将它合并到一个BigInteger类型的类中,它处理用于数学计算的压缩char []数组.

  • 如果你只使用英语,那就很好.我的建议是避免这样的事情,因为他们不能理解我的非英语用户的晚餐,因为他们无法理解什么是"K"或"M"的意思 (2认同)

Ben*_*son 8

鉴于这是Google的第一个结果format number commas java,这里的答案适用于使用整数并且不关心小数的人.

String.format("%,d", 2000000)
Run Code Online (Sandbox Code Playgroud)

输出:

2,000,000
Run Code Online (Sandbox Code Playgroud)


小智 6

public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}
Run Code Online (Sandbox Code Playgroud)


Jit*_*ath 5

你也可以使用以下解决方案 -

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}
Run Code Online (Sandbox Code Playgroud)