所以我正在开发一款健身应用程序,我已经使用了很长时间。我们得到了这个奇怪的缺陷,卡路里没有增加,但距离是......所以我调查了。我开始调试,看到持续时间以整数,0,5.0,2.0等进入。然而这个值是双倍的。下面的代码是模块的一部分,我们通过maven将其作为.aar依赖项导入。
以下是实际的源代码:
double duration = (System.currentTimeMillis() - mPreviousTimestamp) / 1000;
反编译的类文件,我从中解析:
double duration = (double)((System.currentTimeMillis() - this.mPreviousTimestamp) / 1000L);
任何想法,为什么会这样,以及可能的解决方案?有没有人见过这个?
答案 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位!