[Java] Addition, opération
Résolu/Fermé
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
-
25 janv. 2007 à 14:27
Osamoelle - 6 juin 2008 à 11:13
Osamoelle - 6 juin 2008 à 11:13
A voir également:
- [Java] Addition, opération
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Formule excel addition - Guide
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 janv. 2007 à 14:46
25 janv. 2007 à 14:46
En fait c'est bon j'ai trouvé une autre facon de faire sans bidouiller :)
Voici le truc :
Merci.
Voici le truc :
int num = 30; java.util.Calendar myCal = java.util.Calendar.getInstance(); java.sql.Timestamp myTS = new java.sql.Timestamp(myCal.getTimeInMillis()); System.out.println("Date courante : "+myTS.toString()); myCal.add(java.util.Calendar.DATE,(-1) * num); myTS = new java.sql.Timestamp(myCal.getTimeInMillis()); System.out.println("Date calculée : "+myTS.toString()); myCal.getTimeInMillis()
Merci.
Quand tu fais 30*(24*3600*1000); tu réalises ton calcul avec une précision max d'un Integer qui est assez limité pour un calcul de cette taille.
Par défaut, java fait ses calculs en int.
Si tu mets 30.0*(24.0*3600.0*1000.0), il le fera en double.
Si tu mets 30L*(24L*3600L*1000L), il comprendra que chaque nombre est un long
Si tu mets 30f*(24f*3600f*1000f), il comprendra que chaque nombre est un float
Cela a une importance car en info, un nombre selon son type va être codé sur 8, 16, 32 ou 64 bits. On comprend vite alors qu'un entier en 32 bits et qui plus est signé représente un ensemble fini de valeur pouvant être représenté. Je t'invite à regarder la classe Integer et les valeurs de MAX et MIN.
Quand il y a un dépassement des valeurs limites, y'a un overflow, un peu comme si tu depassais sur ta voiture le kilometrage 999 999km, tu reviendrais à 000000, puis 0000001, etc...
Réponse un peu tard, mais je viens de tomber par hasard sur ton post.
Par défaut, java fait ses calculs en int.
Si tu mets 30.0*(24.0*3600.0*1000.0), il le fera en double.
Si tu mets 30L*(24L*3600L*1000L), il comprendra que chaque nombre est un long
Si tu mets 30f*(24f*3600f*1000f), il comprendra que chaque nombre est un float
Cela a une importance car en info, un nombre selon son type va être codé sur 8, 16, 32 ou 64 bits. On comprend vite alors qu'un entier en 32 bits et qui plus est signé représente un ensemble fini de valeur pouvant être représenté. Je t'invite à regarder la classe Integer et les valeurs de MAX et MIN.
Quand il y a un dépassement des valeurs limites, y'a un overflow, un peu comme si tu depassais sur ta voiture le kilometrage 999 999km, tu reviendrais à 000000, puis 0000001, etc...
Réponse un peu tard, mais je viens de tomber par hasard sur ton post.