2010-05-20 6 views

Antwort

1
int ms = Convert.ToInt32(
      Convert.ToString(DateTime.Now.Millisecond).Substring(0, 3)); 

oder

double Length = Math.Pow(10, (DateTime.Now.Millisecond.ToString().Length - 3)); 

double Truncate = Math.Truncate((double)DateTime.Now.Millisecond/Length); 

EDIT:

Nach dem Ausführen sowohl die unten auf dem Code, den ich werde nach, die doppelte Methode funktioniert gut durch die Wiederverwendung von Variablen. Bei einer Iteration von 5.000.000 DateTime.Now (in der viele von beiden Überprüfungen übersprungen werden) benötigte die Methode SubString() 9598 ms, und die Methode Double benötigte 6754 ms.

EDIT # 2: Bearbeitet in * 1000 in Tests, um sicherzustellen, dass die Iterationen ausgeführt werden.

-Code zu testen, wie folgt verwendet:

 Stopwatch stop = new Stopwatch(); 
     stop.Start(); 

     for (int i = 0; i < 5000000; i++) 
     { 
      int MSNow = DateTime.Now.Millisecond * 1000; 

      if (MSNow.ToString().Length > 2) 
      { 
       int ms = Convert.ToInt32(
        Convert.ToString(MSNow).Substring(0, 3)); 
      } 
     } 

     stop.Stop(); 

     Console.WriteLine(stop.ElapsedMilliseconds); 

     stop = new Stopwatch(); 
     stop.Start(); 

     for (int i = 0; i < 5000000; i++) 
     { 
      int MSNow = DateTime.Now.Millisecond * 1000; 
      int lengthMS = MSNow.ToString().Length; 

      if (lengthMS > 2) 
      { 
       double Length = Math.Pow(10, (lengthMS - 3)); 
       double Truncate = Math.Truncate((double)MSNow/Length); 
      } 
     } 

     stop.Stop(); 

     Console.Write(stop.ElapsedMilliseconds); 

     Console.ReadKey(); 
+0

Was ist die * effizienteste * Art und Weise? – stacker

+0

@stacker - Nehmen Sie beide und führen Sie sie durch eine 'Stoppuhr' und sehen Sie, welche schneller ist? –

+0

Ich würde sagen, die 'Math.Pow' ist viel langsamer, aber es ist nur eine Vermutung, testen Sie es mit einem' StopWatch'. – IVlad

3

In einem DateTime werden Milliseconds immer zwischen 0 und 999 besteht also alles, was Sie haben nicht zu tun.

+2

Zitieren des MSDN Links, den ich bekanntgab in meiner Antwort "Die Millisekunde-Komponente, ausgedrückt als Wert zwischen 0 und 999." Scheint logisch, dass Sie nicht 32 Tage in einem Monat oder mehr als 999ms in einer Sekunde haben können. –

0
Math.Floor(num * Math.Pow(10, x) + 0.5)/Math.Pow(10, x) 

Wo Ihre Präzision x

+0

Nun, ich denke, ich habe die Antwort aus dem Zusammenhang gegeben. aber ich dachte, du fragst nach Rounding, Anyway ich kann nicht bekommen, was kürzen bedeutet in Zahlen, Entschuldigung tut mir leid, dass ich nicht den Kontext aufgegriffen habe. –

Verwandte Themen