在java语言中,double类型的1.009*1000竟然不等于1009,而是等于1008.999999999999,那么到底为啥呢,这是由于浮点运算的精度导致的,具体的涉及到将1.0009表达成01二进制表达式之后,位运算的问题了,具体的请参考计算机组成原理的相关内容。
解决办法就是用BigDecimal。
import java.math.BigDecimal;
public class doubleToInt {
public static void main(String[] args) {
// TODO Auto-generated method stub
double max_neg_bal = 1.009;
System.out.println(String.valueOf(max_neg_bal*1000));//result 1008.9999999999999
int a = (int)(max_neg_bal * 1000);
System.out.println(String.valueOf(a));//result 1008
//method 1
float tmp = (float)(max_neg_bal*1000.00);
int max_neg_bal_int = (int)tmp;
System.out.println(String.valueOf(max_neg_bal_int));//result 1009
//method 2
BigDecimal b1 = new BigDecimal(Double.toString(max_neg_bal));
BigDecimal b2 = new BigDecimal(Double.toString(1000));
int result = b1.multiply(b2).intValue();//.doubleValue();
System.out.println(String.valueOf(result));//result 1009
}
}