一般的思维,1.003*1000=1003,
.....
int ofset = 1000;
double dblvalue = ((Number)object).doubleValue() * ofset;
............这样计算下来,我的dblvalue 的值是1002.9999999999...
因为在下面的计算我是format后,取到的是1002.
所以,想请教各位大虾们,应该通过什么样的计算,我的dblvalue值是1003,当然类型还是需要double的?

解决方案 »

  1.   

    package number;import java.math.BigDecimal;public class DoubleTest { /**
     * @param args
     */
    public static void main(String[] args) {
    double i =1.003;
    double j = 1000;
    BigDecimal result = new BigDecimal(i).multiply(new BigDecimal(j));
    System.out.println(result.setScale(0,0));
    }}
    java中无法表示10的负幂,所以需要BigDecimal包装一下指定精度,楼主可以看看
    <<Java解惑>>这本书
      

  2.   

    感谢楼上的,解决了,但是,
    public class DoubleTest { /**
     * @param args
     */
    public static void main(String[] args) {
    double i = 1.002;
    double j = 1000;
    BigDecimal result = new BigDecimal(i).multiply(new BigDecimal(j));
    System.out.println(result.setScale(0,0));
    }}
    这时候,输出的也是1003了,本人愚笨,对BigDecimal 这个类一点也不知道.请指教.
      

  3.   

    可能没办法的吧
    1.002*1000=1002.000000000xxx,不精确的,看到的跟实际内存中保存的是不一样的,
    1.002*1000,如果确定是整数,则自己取整,如果是1.0021*1000=1002.100000000xxx,按楼主的需求可能是要1002.1
    如果是1.00211*1000按楼主的需求可能是1002.11,这些都是人的计算,而不是计算机的计算,所以应该做不到的吧
      

  4.   

    BigDecimal的构造函数,其中一个构造函数以双精度浮点数作为输入,另一个以整数和换算因子作为输入,还有一个以小数的 String表示作为输入。
    BigDecimal(double)构造函数,会在计算过程中产生舍入误差,最好用整数或String的构造函数。
      

  5.   

    如果你非用BigDecimal(double),也可以使用movePointLeft(好像是这个)控制精度得到理想的结果。