Je veux obtenir le rapport entre une seule pion contre un autre tiers (essentiellement, le progrès d'une vidéo de lecture de son temps total). Mes méthodes actuelles consistent à obtenir les millisecondes des deux objets de l'aéronautique et de diviser une contre l'autre. Quelque chose comme: y a-t-il un itinéraire plus direct? C'est un problème simple et je suis juste curieux s'il y a un moyen super élégant de le résoudre. P> acclamer tout
James p> p>
4 Réponses :
Vous devez utiliser Ticks ou TotalMilliseconds , en fonction de la précision requise . millisecondes est le nombre de millisecondes après la deuxième courant. p>
Quant à une meilleure solution, cela ne gagne pas plus simple qu'une division afin que votre solution actuelle soit bien (moins le bogue). P>
@Richard Szalay obtient la réponse car je sais qu'il a publié la solution en premier.
double progressRatio = progressTimeSpan.Ticks / (double)totalTimeSpan.Ticks; You must cast one to a double, otherwise C# will do integer division. Ticks is better than the TotalMilliseconds because that is how it is stored and avoids any conversion.
@JDUNKERLEY: Le problème de conversion est hors de propos: vous appelez ticks code> puis convertissant en
double code> vous-même. Calling
TotalMilliseconds Code> signifie simplement que la conversion vers
double code> est effectuée dans la méthode à la place.
Ticks Code> a une plus grande précision que
TotalMilliseconds Code>, et c'est souvent une bonne raison de l'utiliser, mais plutôt sans pertinence dans ce cas où nous calculons simplement un ratio.
Je voulais dire que la période de temps est stockée dans des tiques et devra d'abord être convertie en millisecondes avant d'être renvoyée à la fonction. Certes, il s'agit d'une opération très rapide et le coût de ce calcul est fondamentalement zéro, mais il est plus efficace de diviser la coche plutôt que de la convertir à la SEP et de les diviser.
@JDUNKERLEY: Je viens de courir des points de repère rapide ici et il y a aucune différence mesurable sur tout i> entre les deux techniques. Ils gèrent tous deux environ 25 millions d'itérations par seconde et ils sont toujours au cou et au cou même après avoir couru des dizaines de milliards d'itérations.
tispan code> a gagné plusieurs nouveaux opérateurs avec la libération de
var a = new TimeSpan(10, 0, 0);
var b = new TimeSpan(0, 30, 0);
var c = new TimeSpan(0, 4, 30);
Console.WriteLine(a / b);
// Displays: "20"
Console.WriteLine(b / c);
// Displays: "6.66666666666667"
Dommage que ce ne soit pas encore disponible dans la norme .NET.
Utiliser la méthode de l'extension peut rendre des codes plus lisibles.
public static double DividedBy(this TimeSpan x, TimeSpan y) { return Convert.ToDouble(x.Ticks) / y.Ticks; }