我有一个愚蠢的问题:
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测试)如何控制逗号后的位数?
答案 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