2011-04-18 8 views
4

J'ai un nombre décimal. La plage de cette décimale est comprise entre 0 et 23,999999. Cette décimale représente une heure. Par exemple, si le nombre décimal est 0,25, l'heure qu'il représente est 12h15. Si la décimale est 23.50, l'heure affichée est 23:30.Convertir décimal représentant le temps en heure, minutes, secondes

J'ai trois variables: - Heures - Minutes - Secondes

En utilisant cette décimale, comment puis-je remplir les Hours, Minutes et Seconds valeurs?

+0

Quelle langue? – Marlon

+0

A en juger par le nom d'utilisateur, probablement un langage .NET: P – Domenic

Répondre

11

Eh bien, voici une réponse en C#, mais il est généralement la même idée dans la plupart des langues:

int hours = (int)hoursDecimal; 
decimal minutesDecimal = ((hoursDecimal - hours) * 60); 
int minutes = (int)minutesDecimal; 
int seconds = (int)((minutesDecimal - minutes) * 60); 
+0

int secondes = (minutesAsADecimal - minutesAsAnInt) * 60? – DotNetDateQuestion

+5

Je vois un point d'interrogation, mais je ne comprends pas la question ... – Domenic

+0

Wont la conversion en int arrondir la partie de l'heure, donnant un résultat incorrect si le reste est>. – DavidB

2

Les heures devraient être assez faciles.

Il y a 60 minutes en 1 heure, alors obtenez la partie décimale, multipliez-la par 60 et prenez l'entier. Reprenez la décimale, multipliez-la par 60, et vous avez vos secondes.

Par exemple, prenons le nombre 20.38490

Nous savons qu'il est 20 heures ou 20 heures.

Cela nous laisse avec le nombre .38490

Multipliant avec 60, nous obtenons 23.094 minutes.

En multipliant .094 par 60, nous obtenons 5 secondes.

+0

Plus utile que ci-dessus! – nfell2009

0

Quelle que soit la langue que vous utilisez, vous pouvez le faire en utilisant les fonctions mathématiques: MOD et FLOOR/TRONQUE

soit « dec » soit la variable décimale

trunc(mod(dec, 1)) => hours 
trunc(mod(dec * 60, 60)) => minutes 
trunc(mod(dec * 3600, 60)) => seconds 

En C#, vous pouvez tronquer un nombre décimal int en utilisant simplement coulée explicite, par exemple

int seconds = (int) ((dec * 3600) % 60) 
1

Vous pouvez utiliser la fonction floor pour supprimer les heures et laisser les minuites et les secondes sous la forme d'une fraction d'heure. Vous pouvez ensuite utiliser à nouveau la fonction floor pour supprimer les minutes en une fraction d'heure. vous êtes alors à gauche avec les secondes (en fractions d'une heure)

ci-dessous un exemple simple pour imprimer des heures et des minutes le lever du soleil est en heures fractionnaires depuis minuit

printf("sunrise %ld:%ld, \n", 
      (long)floor(sunrise), 
       (long)(floor(sunrise * 60) - 60 * floor(sunrise))); 
Questions connexes