2017-06-26 3 views
-1

Je le code suivant:conversion incorrecte de la double et à long

Double.valueOf(defaultValue.toString()).longValue()

J'utilise cette ligne pour analyser le defaultValue d'un TimePicker j'ai créé pour Android. Je définis la valeur par défaut pour cela (dans mon PreferenceScreen xml) pour être 1483318800000. Pour une raison quelconque, il commence en notation scientifique: 1.48331876E12, puis après avoir parcouru le code ci-dessus: 1483318760000. Ça finit par être éteint. J'ai besoin qu'il soit correct puisque c'est un horodatage en millisecondes. Je tourne pour 20 heures - mais je peux seulement l'obtenir à 19h59 (puisque après la conversion, il est éteint). Si je fais Long.parseLong(defaultValue.toString()) alors je vais obtenir un NumberFormatException puisqu'il est en notation scientifique. Comment puis-je garantir une conversion "bonne"?

Modifier: Le code de conversion est la première ligne de code que je montre ci-dessus. Je le réglage de la valeur par défaut comme ceci:

<TimePreference 
      android:defaultValue="1483318830000" 
      android:key="settings_night_mode_start_time" 
      android:title="@string/settings_night_mode_start" /> 

Ensuite, il est transmis dans this function.

+4

Fixer l'endroit qui convertit 1483318800000 à 1.48331876E12, parce que cette partie le fait mal. La valeur correcte doit être 1.4833188E12. – Tom

+1

Afficher le code de la conversation à 1.48331876E12 –

+1

Quel type a 'defaultValue' obtenu? –

Répondre

1

Merci à la réponse de @ rustot, je trouve que there is an issue with Preferences in Android regarding parsing the default values.

Le correctif a été de définir la valeur par défaut avec une ressource de chaîne au lieu de la valeur long je le donne.

<string name="settings_night_mode_default_start_time" translatable="false">1483318830000</string>

<TimePreference 
      android:defaultValue="@string/settings_night_mode_default_start_time" 
      android:key="settings_night_mode_start_time" 
      android:title="@string/settings_night_mode_start" /> 

Cela fonctionne comme prévu. :)

3

À un certain endroit avant votre code, cette valeur était déjà convertie en Float (pas en double), puis en chaîne.

System.out.println(Float.valueOf("1483318800000")); 

1.48331876E12

+0

On dirait que cela pourrait être un problème avec Android alors. La définition de la valeur par défaut dans un fichier XML "Preference" de cette longueur peut être convertie automatiquement en float. Merci! – Nxt3

+0

[Il s'avère que j'avais raison.] (Https://room-15.github.io/blog/2015/03/30/beware-of-preference-default-values-in-xml/). Grâce à vous, j'ai trouvé une solution. Je vous en suis reconnaissant! – Nxt3