Java编译器或android编译器正在截断我的双打......?

时间:2016-06-24 23:03:11

标签: java android

所以我正在开发一款健身应用程序,我已经使用了很长时间。我们得到了这个奇怪的缺陷,卡路里没有增加,但距离是......所以我调查了。我开始调试,看到持续时间以整数,0,5.0,2.0等进入。然而这个值是双倍的。下面的代码是模块的一部分,我们通过maven将其作为.aar依赖项导入。

以下是实际的源代码:

double duration = (System.currentTimeMillis() - mPreviousTimestamp) / 1000;

反编译的类文件,我从中解析:

double duration = (double)((System.currentTimeMillis() - this.mPreviousTimestamp) / 1000L);

任何想法,为什么会这样,以及可能的解决方案?有没有人见过这个?

2 个答案:

答案 0 :(得分:2)

的结果
(System.currentTimeMillis() - mPreviousTimestamp) / 1000

int。您有int除以int。结果是int。然后通过赋值将int强制转换为double,但此时精度已消失。

你应该这样做,

double duration = (System.currentTimeMillis() - mPreviousTimestamp) / 1000.0;

通过在计算中包含double(1000.0),它使表达式的结果也变为double。

答案 1 :(得分:0)

尝试:

Text.setText(String.format(" a的值:%。8f",a));

小数点后8位!