String en float dans java

Résolu/Fermé
Titelouve Messages postés 25 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 16 juillet 2012 - Modifié par Titelouve le 12/07/2010 à 17:56
Titelouve Messages postés 25 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 16 juillet 2012 - 13 juil. 2010 à 07:44
Bonjour,

Je m'acharne tant bien que mal sur un programme en java, mais une spécialité est apparue qui me laisse dubitative...

Voilà la partie de code où je transforme un morceau de String en float (je l'ai truffée de System.out.println pour être sûre de la justesse du résultat):

System.out.println(lignesFinales[i]); 

System.out.println(lignesFinales[i].substring(lignesFinales[i].indexOf("<lastVisitedDate>")+17, lignesFinales[i].indexOf("</"))); 

float f = Float.parseFloat(lignesFinales[i].substring(lignesFinales[i].indexOf("<lastVisitedDate>")+17, lignesFinales[i].indexOf("</"))); 

System.out.println(f);


Et voilà le résultat sur la console:

<lastVisitedDate>300129019.5</lastVisitedDate>
300129019.5
3.00129024E8


Je n'arrive pas à comprendre pourquoi le nombre est modifié quand je le transforme en float!!!
Si vous pouviez éclairer ma lanterne, ou peut-être me conseiller une autre démarche (je le transforme ensuite en long pour en faire une date).
En fait il s'agit d'une date iPhone que je veux formatter en qqch de plus... intuitif!

Merci d'avance et bonne soirée



A voir également:

4 réponses

Utilisateur anonyme
12 juil. 2010 à 21:18
Bonjour,

Mais c'est quoi cette valeur (300129019.5)? des millisecondes?

Cordialement

Dan
0
Titelouve Messages postés 25 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 16 juillet 2012
Modifié par Titelouve le 12/07/2010 à 21:38
Il semblerait que ce soit un timestamp UNIX, soit les secondes depuis le 1er janvier 1970. En fait c'est pas exactement ça, après faut encore adapter pour arriver à la date réelle (ajouter 31 ans, et 1 jour supplémentaire par année bissextile depuis l'année 2008 compris). C'est un peu du bricolage, et j'espère que mes sources sont fiables sinon ce que je fais ne sert à rien. Vive les formats mac!!!
Si jamais, je suis consciente que je dois multiplier mon nombre par 1000 pour arriver à des millisecondes et être compatibles avec la date java.
A première vue la suite de mon programme fonctionne bien. C'est juste ce changement de valeur qui m'embête.
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
12 juil. 2010 à 21:50
Salut,
utilise plutôt un double...tu gagnes en precision...
String m="<lastVisitedDate>300129019.5</lastVisitedDate>";
Double d=Double.parseDouble(m.substring(m.indexOf("<lastVisitedDate>")+17, m.indexOf("</")));
float f =Float.parseFloat(m.substring(m.indexOf("<lastVisitedDate>")+17, m.indexOf("</")));
System.out.print(m+"\n"+d+"\n"+f+"\n" );

resultat:
<lastVisitedDate>300129019.5</lastVisitedDate>
3.001290195E8
3.00129024E8

@+
0
Titelouve Messages postés 25 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 16 juillet 2012
13 juil. 2010 à 07:44
Super, merci bien. Cette fois ça fonctionne.
0