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的结果。 提前谢谢。
答案 0 :(得分:3)
那是因为你正在执行整数除法(1,4和10被视为整数,因此1/4
和1/10
将是整数除法。
将w1
和w2
更改为:
double w1 = 1/4.0;
double w2 = 10/4.0;
这样java将执行浮点除法
答案 1 :(得分:3)
1 / 4
和10 / 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);