我想返回一个带有2位小数的双精度数(即123.00)。以下是代码的一部分。输出始终为123.0。如何获得两位小数?
public static double getPrice(){
double price = Double.valueOf(showInputDialog("Stock's price : "));
DecimalFormat rounded = new DecimalFormat("###.00");
double newPrice = Double.valueOf(rounded.format(price));
System.out.println(newPrice);
return newPrice;
}
答案 0 :(得分:3)
只要你的函数的返回类型是double
,简短的答案是“你不能”。
许多不超过两位小数的数字不能完全表示为double
。一个常见的例子是0.1
。距离它最近的double
是0.100000000000000005551115...
无论你做了多少舍入,你都无法准确得到0.1
。
就你的选择而言,你可以:
double
; int
(即舍入值乘以100); String
; BigDecimal
。特别是,如果您要表示货币金额,使用double
几乎肯定是个坏主意。
答案 1 :(得分:1)
格式化时,您要从双重字符串中创建字符串。不要再将格式化的字符串转换为double:
String formattedPrice = rounded.format(price);
System.out.println(formattedPrice); // prints 123.00 or 123,00, depending on your locale
A double保持IEEE754之后的数值,它不保留任何格式信息,并且它的精确度仅与IEEE754双精度允许的一样精确。如果您需要保留逗号之后的数字等呈现信息,则需要其他内容,例如BigDecimal。