线程“主”java.lang.IllegalArgumentException 中的异常:无法将给定对象格式化为数字
Posted
技术标签:
【中文标题】线程“主”java.lang.IllegalArgumentException 中的异常:无法将给定对象格式化为数字【英文标题】:Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Number 【发布时间】: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));
【问题讨论】:
【参考方案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));
【讨论】:
以上是关于线程“主”java.lang.IllegalArgumentException 中的异常:无法将给定对象格式化为数字的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 的 YML 文件中创建条件属性?
Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )