在Java中格式化为2个小数位

时间:2016-10-24 20:09:38

标签: java

尝试将输出格式化为2位小数时,我一直收到错误。例如来自5.0我想要5.00在java中。下面的代码不断给出格式错误。

System.out.printf("%-40s %-6.2f", "Borrowing Fee:  $", borrowingFee + "\n");

我希望它输出:Borrowing Fee: $5.00

6 个答案:

答案 0 :(得分:0)

为什么这么复杂的代码? 如果您有一个浮动作为输入,您可以这样做:

  public static void main(String[] args) {
      float borrowingFee = 5.0F;
      System.out.printf("Borrowing Fee:  $%.2f ", borrowingFee );
    }

它应该根据您的语言区域返回Borrowing Fee: $5,00Borrowing Fee: $5.00

答案 1 :(得分:0)

如果您使用{ "errorOccured": false, "transaction": [ { "businessDate": "10/25/2011", "canViewReceipt": false, "modifiedBusinessDate": "" } ] } 进行编程,则格式化打印与C相同。 尝试这样的事情:

C

答案 2 :(得分:0)

您可以使用DecimalFormat。它有许多实用功能。

public static String getFormattedAmountWithDecimals(String value){
    String tmpDouble = ""; 
     DecimalFormat formatter = new DecimalFormat("###,###,###.00");

    try {
        tmpDouble = formatter.format(Double.parseDouble(value));
        if(tmpDouble.equalsIgnoreCase(".00")){
            tmpDouble = "0.00";
        }
    }catch(Exception e) {
    //  System.out.println(e.toString());
    }
    return tmpDouble;
}   

答案 3 :(得分:0)

我喜欢参考该方法的公开文档。

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

最重要的是格式:

  

public PrintStream format(String format,Object ... args)

然后再回头看一下你的代码:

  

System.out.printf(“% - 40s%-6.2f”,“借款费用:$”,借用费+“\ n”);

你正在尝试字符串+字符串+参数+字符串。所以如果你想修改你的代码行:

  

System.out.printf(“% - 40s%-6.2f”,“借款费用:$ \ n”,借用费用);

这样就回到了方法String + String + ... + n string,Arguments

的格式

答案 4 :(得分:0)

首先,%s 表示字符串,%f 表示浮点数。

  

System.out.printf("% - 40s%-6.2f","借款费用:$&#34 ;,借用费+" \ n");

在你的情况下,第三个参数borrowingFee + "\n"创建一个字符串,它不能与%f匹配。这就是您可能收到异常消息java.util.IllegalFormatConversionException: f != java.lang.String

的原因

此处IllegalFormatConversionException表示f(%f)与java.lang.String不兼容。

简单的解决方法是将\n移动到第一个参数中,因为它的格式是:

System.out.printf("%-40s %-6.2f\n", "Borrowing Fee:  ", borrowingFee);

请注意,第一个参数"%-40s %-6.2f\n"是使用%s和%f创建空白的格式,其余参数是这些空白的填充。

此外,您的第二个参数"Borrowing Fee: $"被承诺为固定字符串。除非您想在冒号和Borrowing Fee: 55.00之类的数字之间留出巨大空间,否则您不需要格式化它。你可以简单地做

System.out.printf("Borrowing Fee: %.2f\n", borrowingFee);

\t

稍大的空间
System.out.printf("Borrowing Fee:\t %.2f\n", borrowingFee);
docs.oracle.com(java7)上的

printf

  

public PrintStream printf(String format ,                    对象... args)

     

参数:

     
      
  • 格式 - 格式字符串语法中描述的格式字符串

  •   
  • args - 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略额外参数。参数的数量是可变的,可以为零。参数的最大数量受Java™虚拟机规范定义的Java数组的最大维数限制。 null参数的行为取决于转换。

  •   

我打算在代码中解释函数调用和错误。

查看Andy的链接,了解有关格式化的详细信息。

答案 5 :(得分:0)

替换

System.out.printf("%-40s %-6.2f", "Borrowing Fee:  $", borrowingFee + "\n");

使用

System.out.printf("%-40s %-6.2f%n", "Borrowing Fee:  $", borrowingFee );

输出:

Borrowing Fee:  $                        5.00  

说明:

  1. "Borrowing Fee: $"的格式为%-40s
  2. borrowingFee的格式为%-6.2f
  3. %n用于换行