0

我想返回一个带 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;
}
4

2 回答 2

3

只要你的函数的返回类型是double,简短的回答就是“你不能”。

许多不超过两位十进制数字的数字不能完全表示为double。一个常见的例子是0.1double离它最近的是0.100000000000000005551115...

不管你做了多少四舍五入,你都无法得到精确0.1的 .

就您的选择而言,您可以:

  1. 接受与 using 相关的舍入问题double
  2. 返回一个int(即舍入值乘以 100);
  3. 返回一个String
  4. 返回一个BigDecimal

特别是,如果您代表货币金额,那么使用double几乎可以肯定是一个坏主意。

于 2013-03-17T07:44:51.013 回答
1

格式化时,您正在从双精度中创建一个字符串。不要再次将格式化字符串转换为双精度:

String formattedPrice = rounded.format(price);
System.out.println(formattedPrice); // prints 123.00 or 123,00, depending on your locale

double保留 IEEE754 之后的数值,它不保留任何格式信息,并且仅在 IEEE754 双精度允许的范围内精确。如果您需要保留逗号后的位数等渲染信息,则需要其他内容,例如BigDecimal

于 2013-03-17T07:37:54.253 回答