如何返回带小数点后两位的double?

时间:2013-03-17 07:35:40

标签: java double

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

2 个答案:

答案 0 :(得分:3)

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

许多不超过两位小数的数字不能完全表示为double。一个常见的例子是0.1。距离它最近的double0.100000000000000005551115...

无论你做了多少舍入,你都无法准确得到0.1

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

  1. 接受与使用double;
  2. 相关的四舍五入问题
  3. 返回int(即舍入值乘以100);
  4. 返回String;
  5. 返回BigDecimal
  6. 特别是,如果您要表示货币金额,使用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