我一直在阅读传感器读数的时间戳值,但由于它们是以纳秒提供的,因此我认为我会将它们转换为double并进行转换。结果的数字是一个17位数值,加上分隔符。格式化使用DecimalFormat不使用科学计数法进行双打印
试图直接打印它会导致科学记数法,这是我不想要的,所以我使用DecimalFormat类将其输出到4位小数位的期望值。问题是,即使调试器显示17位十进制数字,即使在调用'doubleValue()'后,输出字符串也会显示15位数字。
代码:
...
Double timestamp = (new Date().getTime()) + // Example: 1.3552299670232847E12
((event.timestamp - System.nanoTime())/1000000D);
DecimalFormat dfmt = new DecimalFormat("#.####");
switch(event.sensor.getType()){
case Sensor.TYPE_LINEAR_ACCELERATION:
case Sensor.TYPE_ACCELEROMETER:
accel = event.values.clone();
String line = "A" + LOGSEPARATOR +
dfmt.format(timestamp.doubleValue()) + // Prints: 1355229967023.28
...
我想这可能是一个机器人的精度问题,但调试器显示错误的精确度以及格式化。我已经在本地java程序中测试了这个,并且这两个调用都有相同数量的数字。
这是一个DecimalFormat错误/限制吗?或者我做错了什么?
你的问题是,数量不适合的格式。试试“##############。####”。 –
我也尝试过,但无论如何我都忘记了。格式“####################。####”(带有7个额外数字)获得相同的结果。 – ravemir
您是使用DecimalFormat的java.util版本还是Android版本? –