我正在尝试创建一个应用程序,它将返回双数字小数点前的最后三位数字。 在下面的示例中,结果应为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
所以我猜这个问题与第一个例子中的大数字有关?但我需要处理这么多数字。
为什么会这样? 欢呼声。
答案 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位数。干杯!