【问题标题】:Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Number线程“主”java.lang.IllegalArgumentException 中的异常:无法将给定对象格式化为数字
【发布时间】:2021-02-02 00:32:37
【问题描述】:

我需要显示 2 个小数点,但我不知道该怎么做。

线程“main”java.lang.IllegalArgumentException 中的异常:无法将给定对象格式化为数字

import java.text.DecimalFormat;
import java.util.Scanner;
public class ShoppingOrders {
    public static void main(String[] args) {
        double itemPrice, shippingFeeRate, shippingFee,totalCost;
        String nameItem;
        Scanner myScanner= new Scanner (System.in);
        DecimalFormat df = new DecimalFormat("#.00");
        
        nameItem = myScanner.nextLine();
        itemPrice = myScanner.nextDouble();
        shippingFeeRate = myScanner.nextDouble();
        
        shippingFee =shippingFeeRate*itemPrice;
        totalCost = shippingFee+itemPrice;
        
        System.out.println ("Costs for "+nameItem);
        System.out.println (df.format("Item Price: $" +itemPrice));
        System.out.println (df.format("Shipping Fee: $"+ shippingFee));
        System.out.println (df.format("Total Cost: $"+totalCost));
    }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    您错误地使用了DecimalFormat.format(...)。您不会将其传递给String。您将一个表示数字的对象传递给它。 (或将被装箱为表示数字的对象的原始数字类型。)

    例如:

    df.format(itemPrice)    // itemPrice will be boxed to a Double
    

    因此,如果您想在输出中包含一条消息,您可以这样做:

    System.out.println("Item Price: $" + df.format(itemPrice));
    

    或者,您可以使用String.format(...) 并在格式说明符中指定小数点后的位数。

    【讨论】:

      【解决方案2】:

      DecimalFormat.format(...) 用于格式化数字。在您的情况下,您向双精度数添加了一个字符串,这会将其转换为 String,而 DecimalFormat.format(...) 不支持。相反,使用:

      import java.text.DecimalFormat;
      import java.util.Scanner;
      public class Main{
      public static void main(String[] args) {
          double itemPrice, shippingFeeRate, shippingFee,totalCost;
          String nameItem;
          Scanner myScanner= new Scanner (System.in);
          DecimalFormat df = new DecimalFormat("#.00");
          
          nameItem = myScanner.nextLine();
          itemPrice = myScanner.nextDouble();
          shippingFeeRate = myScanner.nextDouble();
          
          shippingFee =shippingFeeRate*itemPrice;
          totalCost = shippingFee+itemPrice;
          
          System.out.println ("Costs for "+nameItem);
          System.out.println ("Item Price: $" +df.format(itemPrice));
          System.out.println ("Shipping Fee: $"+ df.format(shippingFee));
          System.out.println ("Total Cost: $"+df.format(totalCost));
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        相关资源
        最近更新 更多