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
来自JavaDouble.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
来自JavaDouble.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
。没有逗号,只有句点、点或小数点。