在Java中添加0.39 Double变量

时间:2017-07-16 01:55:14

标签: java double

在添加一个只有0.39(奇怪号码)的双重内容时,对于一个奇怪的行为需要一些建议。第一个片段有0.38的正确示例,第二个片段有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

1 个答案:

答案 0 :(得分:1)

使用from subprocess import check_output root = Tk() # to get the error message you need to catch stderr too a = check_output("sh amapt.sh; exit 0", shell=True, stderr=subprocess.STDOUT) w = Label(root, text=a) w.pack() root.mainloop() 时,您希望使用采用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