在Java中添加0.39双变量
问题描述:
需要几个关于添加一个只有0.39(奇怪数字)的双精度奇怪行为的建议。第一个片段与0.38正确例如,用0.39在Java中添加0.39双变量
// code snippet 1 : Adding xxxx.38 to xxxx.00
double b =1031.38;
double a =1587.00;
System.out.println ("using double "+(a+b));
BigDecimal premium = BigDecimal.valueOf(a);
BigDecimal netToCompany = BigDecimal.valueOf(b);
double result =Double.parseDouble(premium.add(netToCompany).toString());
System.out.println("using BigDecimal "+result);
// correct Output xxxx.38 + xxxx.00 = xxxx.38
using double 2618.38
using BigDecimal 2618.38
***** ------------------------------ ******
// code snippet 2 : Adding xxxx.39 to xxxx.00
double b =1031.39;
double a =1587.00;
System.out.println("using double "+(a+b));
BigDecimal premium = BigDecimal.valueOf(a);
BigDecimal netToCompany = BigDecimal.valueOf(b);
double result = Double.parseDouble(premium.add(netToCompany).toString());
// wrong Output xxxx.39 + xxxx.00 = xxxx.3900000000003
using double 2618.3900000000003
using BigDecimal 2618.39
答
第二当你使用BigDecimal
,您要使用,需要一个String
版本。如果您使用double
,那么您已经有已经失去精确度。
BigDecimal premium = new BigDecimal("1031.38");
BigDecimal netToCompany = new BigDecimal("1587.00");
其输出(如预期)
2618.38
为2618.39
BigDecimal premium = new BigDecimal("1031.39");
BigDecimal netToCompany = new BigDecimal("1587.00");
System.out.println(premium.add(netToCompany));
但和,如果你需要使用double
,你可能选择使用格式化的输出(将ro UND你)喜欢
double[] premiums = { 1031.38, 1031.39 };
double netToCompany = 1587.0;
for (double premium : premiums) {
System.out.printf("%.2f%n", premium + netToCompany);
}
谢谢,我知道格式,但我不应该按照needm的问题是只有0.39,为什么我们越来越2618.3900000000003。小数点后的长000s。不会发生任何otjer数字。如果我没有选择建议,将做格式。 Thx –
@ N.Murali [smbc - '0.1 + 0.2'](http://www.smbc-comics.com/?id=2999) –