printf 方法中的多个参数
multiple arguments in a printf method
我正在为我的 Java class 编写代码,要求我创建看起来像 bill/receipt 的东西。
类似于:
Item quantity price total
gum 10 .49 .90
soda 3 .00 .00
chips 20 .25 .00
我正在使用 printf();方法。我声明的变量是
double gumPrice = 1.49;
float gumQuantity = 10;
double gumTotal = 14.90;
double sodaPrice = 1.00;
float sodaQuantity = 3;
double sodaTotal = 3.00;
double chipsPrice = 1.25;
float chipsQuantity = 20;
double chipsTotal = 25.00;
我需要创建一些 printf();以这种方式列出数据的语句。
这是我目前为止的口香糖,它给我一个错误。
System.out.printf("%-30s %-10.2f %-10.2f %-5.2f", "Gum",gumQuantity,"$"+gumPrice,"$"+gumTotal);
在 printf() 中放入双精度数的正确方法是什么?在一行中列出多个参数时?
最初的问题是由于 Java 输出格式 String
连接和 printf
格式的两种格式化方法不正确混合造成的。正如评论中指出的那样,"$"+gumPrice
是一个字符串,而不是双精度数。它必须具有 %s
格式,而不是 printf
中的 %f
。但是,最好选择一种格式化方式并坚持使用。
采用 printf
方法,我认为在这种情况下更好,输出行变为:
System.out.printf("%-30s %-10.2f $%-10.2f $%-5.2f", "Gum",gumQuantity,gumPrice,gumTotal)
;
并打印:
Gum 10.00 .49 .90
如果您使用字符串连接方法,则需要使用 DecimalFormat
显式转换 doubles
以强制保留两位小数。
避免 double
金额的原因是许多短终止小数只能近似表示。您的 gumPrice
实际上是 1.4899999999999999911182158029987476766109466552734375,这与您想要的略有不同。另一方面,new BigDecimal("1.49")
正好是 1.49。在某些情况下,特别是如果您需要截断而不是舍入到最接近的值,double
引入的微小差异可能很重要,因此 BigDecimal
对于货币计算更安全。
我正在为我的 Java class 编写代码,要求我创建看起来像 bill/receipt 的东西。 类似于:
Item quantity price total
gum 10 .49 .90
soda 3 .00 .00
chips 20 .25 .00
我正在使用 printf();方法。我声明的变量是
double gumPrice = 1.49;
float gumQuantity = 10;
double gumTotal = 14.90;
double sodaPrice = 1.00;
float sodaQuantity = 3;
double sodaTotal = 3.00;
double chipsPrice = 1.25;
float chipsQuantity = 20;
double chipsTotal = 25.00;
我需要创建一些 printf();以这种方式列出数据的语句。
这是我目前为止的口香糖,它给我一个错误。
System.out.printf("%-30s %-10.2f %-10.2f %-5.2f", "Gum",gumQuantity,"$"+gumPrice,"$"+gumTotal);
在 printf() 中放入双精度数的正确方法是什么?在一行中列出多个参数时?
最初的问题是由于 Java 输出格式 String
连接和 printf
格式的两种格式化方法不正确混合造成的。正如评论中指出的那样,"$"+gumPrice
是一个字符串,而不是双精度数。它必须具有 %s
格式,而不是 printf
中的 %f
。但是,最好选择一种格式化方式并坚持使用。
采用 printf
方法,我认为在这种情况下更好,输出行变为:
System.out.printf("%-30s %-10.2f $%-10.2f $%-5.2f", "Gum",gumQuantity,gumPrice,gumTotal)
;
并打印:
Gum 10.00 .49 .90
如果您使用字符串连接方法,则需要使用 DecimalFormat
显式转换 doubles
以强制保留两位小数。
避免 double
金额的原因是许多短终止小数只能近似表示。您的 gumPrice
实际上是 1.4899999999999999911182158029987476766109466552734375,这与您想要的略有不同。另一方面,new BigDecimal("1.49")
正好是 1.49。在某些情况下,特别是如果您需要截断而不是舍入到最接近的值,double
引入的微小差异可能很重要,因此 BigDecimal
对于货币计算更安全。