Ich habe Zeitstempel Werte von Sensor Lesungen gelesen, aber da sie in Nanosekunden bereitgestellt werden, dachte ich, ich würde sie werfen, um zu verdoppeln und die Konvertierung vornehmen. Die resultierende Zahl ist ein 17-stelliger Wert plus das Trennzeichen.Formatieren Double zum Drucken ohne wissenschaftliche Notation mit Dezimalformat
Der Versuch, es direkt zu drucken, führt zu wissenschaftlicher Notation, die ich nicht möchte, also verwende ich eine DecimalFormat-Klasse, um es auf einen erwarteten Wert von 4 Dezimalstellen auszugeben. Das Problem ist, obwohl der Debugger selbst nach dem 'doubleValue()' Aufruf eine Anzahl von 17 Dezimalziffern anzeigt, zeigt der Ausgabe-String eine Anzahl von 15 Ziffern an.
Code:
...
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
...
dachte ich, könnte dies ein Android Präzision Problem sein, aber der Debugger hat die Formatierungs die falsche Präzision als auch zeigt. Ich habe dies in einem lokalen Java-Programm getestet und beide Anrufe haben die gleiche Anzahl von Ziffern.
Ist dies ein DecimalFormat Fehler/Einschränkung? Oder mache ich etwas falsch?
Ihr Problem ist, dass die Zahl nicht in dem Format paßt. Versuchen "##############.####". –
Das habe ich dann auch probiert, habe es aber trotzdem überprüft, falls ich es vergessen hätte. Ein Format "####################. ####" (mit 7 zusätzlichen Ziffern) führt zum gleichen Ergebnis. – ravemir
Verwenden Sie die java.util-Version von DecimalFormat oder eine Android-Version? –