获取大双数的小数点前的数字

时间:2014-12-07 23:43:43

标签: java

我正在尝试创建一个应用程序,它将返回双数字小数点前的最后三位数字。 在下面的示例中,结果应为006。

  double number = 6.578336356630531E15;
  int num = (int) number % 1000;
  String output = String.format("%03d", num);
  System.out.println(output);

但结果是:647

但对于以下相同的方法,结果是正确的: 应该返回006。

  double number = 6.57833;
  int num = (int) number % 1000;
  String output = String.format("%03d", num);
  System.out.println(output);

现在结果是正确的:006

所以我猜这个问题与第一个例子中的大数字有关?但我需要处理这么多数字。

为什么会这样? 欢呼声。

2 个答案:

答案 0 :(得分:2)

  

在下面的示例中,结果应为006

没有。它应该是531,即值6578336356630531的最后三位数。

但是6578336356630531几乎肯定太大而无法适应double而不会失去精确度。 double只有53位精度,即十进制数15.9。

将该值转换为int将导致进一步截断和精度损失。

答案 1 :(得分:0)

尝试使用long,因为您的转换INT优先于模数,并且您正在失去精度:

public static void main(String[] args) {
     double number = 6.57833;
      int num = (int) number % 1000;
      String output = String.format("%03d", num);
      System.out.println(output);

       number = 6.578336356630531E15;
       long num2 = (long) number % 1000;
       output = String.format("%03d", num2);
      System.out.println(output);
}

为我工作。给了我531,这是最后3位数。干杯!