センサーの読み取り値からタイムスタンプ値を読み取っていますが、ナノ秒単位で提供されるため、2倍にキャストして変換することを考えました。結果の数値は、17桁の値に区切り文字を加えたものです。
直接印刷しようとすると科学的記数法になりますが、これは望ましくないので、DecimalFormatクラスを使用して、小数点以下4桁の期待値に出力します。問題は、デバッガーが10進数の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のバグ/制限ですか?それとも私は何か間違ったことをしていますか?