双重圆形而不精确

时间:2014-04-12 14:21:04

标签: java double precision rounding

double x = 0;
double P = 0.327; //P is a actually function that return double and change all the time
double w1 = 1/4; //prints 0 (w1 and w2 are same as P)
double w2= 10/4; //prints 2
x=x+P*w1+(1-P)*w2; 
System.out.println(x); // prints 1.346 and the real result is 1.76425

我不知道如何克服双重问题,我尝试了BigDecimal,也许我只是不做对..

我不需要非常精确的结果,但我确实需要1.764的结果。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

那是因为你正在执行整数除法(1,4和10被视为整数,因此1/41/10将是整数除法。

w1w2更改为:

double w1 = 1/4.0;
double w2 = 10/4.0;

这样java将执行浮点除法

答案 1 :(得分:3)

1 / 410 / 4是整数除法。他们的结果是一个int,然后扩展为double。你想要的是双重分裂:

double w1 = 1.0 / 4

double w1 = 1 / 4.0

答案 2 :(得分:0)

setScale然后使用ROUND_HALF_DOWN向下舍入 bigdecimal

   BigDecimal bigdecimal=new BigDecimal(x);
   bigdecimal.setScale(2, BigDecimal.ROUND_HALF_DOWN);