【发布时间】:2012-11-30 07:55:57
【问题描述】:
我一直在从传感器读数中读取时间戳值,但由于它们是以纳秒为单位提供的,我想我会将它们转换为加倍并进行转换。结果数字是一个 17 位的值,加上分隔符。
尝试直接打印它会导致科学记数法,这是我不想要的,因此我使用 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
...
我认为这可能是一个 android 精度问题,但调试器的格式化程序也显示了错误的精度。我在本地 java 程序中对此进行了测试,两个调用的位数相同。
这是 DecimalFormat 错误/限制吗?还是我做错了什么?
【问题讨论】:
-
您的问题是数字不符合格式。试试“##############.####”。
-
当时我也试过了,但还是检查了一下,以防我忘记了。格式“###################.####”(有 7 个额外数字)得到相同的结果。
-
您使用的是 java.util 版本的 DecimalFormat 还是 Android 版本?
-
我不认为Android有一个DecimalFormat类,因为documentation上唯一的一个来自java。
-
我只是想问一下——Android 有自己的几个类版本,这可能会造成混乱。
标签: java android string-formatting floating-accuracy double-precision