双减运算结果

时间:2014-06-12 08:58:58

标签: java

我有一个愚蠢的问题:

String str0 = "245.00";
String str1 = "45.00";
Double str3 = Double.parseDouble(str0) - Double.parseDouble(str1); 
System.out.println(str3); =====> 200.0

为什么不给200.00? (也用Float测试)如何控制逗号后的位数?

3 个答案:

答案 0 :(得分:3)

.0来自Java Double.toString()的默认实现。

要允许更多控制,请使用Format。请参见此处:NumberFormat api doc和此处DecimalFormat tutorial

对于简单格式化,您还可以使用String.format(),例如:

String.format("%02d", myNumber) 

甚至可以使用System.out.format

直接打印
System.out.format("%.2f", myNumber);

答案 1 :(得分:1)

当存储为字符串时,10与10.0不同,也不同于10.00。当存储为double时,它们可能不相等。永远不要相信两个双打== / .equals()相同。

要打印具有一定小数位数的double,请使用printf方法。例如:

String str0 = "245.00";
String str1 = "45.00";
Double str3 = Double.parseDouble(str0) - Double.parseDouble(str1); 

System.out.println(str3);        // 200.0
System.out.printf("%.2f", str3); // 200.00

答案 2 :(得分:1)

这不是答案,而是进行浮点计算的一般建议。

您应该使用BigDecimal进行计算

public class BigDecimalExample {

    public static void main(String args[]) throws IOException {

      //floating point calculation
      double amount1 = 2.15;
      double amount2 = 1.10;
      System.out.println("difference between 2.15 and 1.0 using double is: " + (amount1 - amount2));

      //Use BigDecimal for financial calculation
      BigDecimal amount3 = new BigDecimal("2.15");
      BigDecimal amount4 = new BigDecimal("1.10") ;
      System.out.println("difference between 2.15 and 1.0 using BigDecimal is: " + (amount3.subtract(amount4)));       
    }      
}

<强>输出:

使用double的2.15和1.0之间的差异是:1.0499999999999998

使用BigDecmial的2.15和1.0之间的差异是:1.05

此答案改编自http://javarevisited.blogspot.in/2012/02/java-mistake-1-using-float-and-double.html

你也可以阅读一篇关于需要BigDecimal的非常好的文章 http://www.javaworld.com/article/2071332/the-need-for-bigdecimal.html