我一直在从传感器读数中读取时间戳值,但由于它们以纳秒为单位提供,所以我想将它们转换为双精度并进行转换。结果是一个17位数字加上分隔符。
尝试直接打印会导致科学计数法,这不是我想要的,因此我使用DecimalFormat类将其输出为预期的4位小数。问题是,即使调试器显示了17个十进制数字,甚至在'doubleValue()'调用之后,输出字符串也显示了15个数字。
代码:
我认为这可能是一个安卓精度问题,但调试器的格式化程序也显示了错误的精度。我已经在本地的Java程序中测试过,两个调用都具有相同数量的数字。
这是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的错误/限制吗?还是我做错了什么?