String en float dans java

Résolu
Titelouve Messages postés 28 Statut Membre -  
Titelouve Messages postés 28 Statut Membre -
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
 
Bonjour,

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

Cordialement

Dan
0
Titelouve Messages postés 28 Statut Membre
 
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 980 Statut Membre 378
 
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 28 Statut Membre
 
Super, merci bien. Cette fois ça fonctionne.
0