Java 双负运算结果

Java 双负运算结果,java,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进行了测试)以及如何控制逗号后的位数?to.0来自JavaDouble.toString()的默认实现 要允许更多控

我有一个愚蠢的问题:

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进行了测试)以及如何控制逗号后的位数?

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

要允许更多控制,请使用
格式
。看这里:还有这里

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

String.format("%02d", myNumber) 
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
甚至可以使用
System.out.format

System.out.format("%.2f", myNumber);

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

要允许更多控制,请使用
格式
。看这里:还有这里

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

String.format("%02d", myNumber) 
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
甚至可以使用
System.out.format

System.out.format("%.2f", myNumber);

当存储为字符串时,10不同于10.0,10.0也不同于10.00。当存储为双精度时,它们可能不相等。永远不要相信两个double是相同的

要打印具有特定小数位数的双精度字符,请使用
printf
方法。例如:

String.format("%02d", myNumber) 
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

当存储为字符串时,10不同于10.0,10.0也不同于10.00。当存储为双精度时,它们可能不相等。永远不要相信两个double是相同的

要打印具有特定小数位数的双精度字符,请使用
printf
方法。例如:

String.format("%02d", myNumber) 
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

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

您应该使用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.0499999998

2.15和1.0之间使用BigDecentral的差异为:1.05

这个答案改编自

此外,您还可以阅读一篇关于BigDecimal需求的非常好的文章
这不是答案,而是进行浮点计算的一般建议

您应该使用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.0499999998

2.15和1.0之间使用BigDecentral的差异为:1.05

这个答案改编自

此外,您还可以阅读一篇关于BigDecimal需求的非常好的文章

作为替身,他们完全平等。作为一个大的十进制数,它们不是。作为一个双精度数,它们是完全相等的。作为BigDecimal,它们不是。如果要保留一定数量的十进制数字,应使用
BigDecimal
。如果只想影响格式,可以使用
NumberFormat
。没有逗号,只有句点、点或小数点。如果要保留一定数量的小数位数,应使用
BigDecimal
。如果只想影响格式,可以使用
NumberFormat
。没有逗号,只有句点、点或小数点。