2010-05-20 10 views

Respuesta

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

o

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

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

EDIT:

Después de ejecutar tanto el siguiente en el código Voy a publicar, el método de doble funciona bien debido a la reutilización de variables. En una iteración de 5.000.000 de DateTime.Now (en la que muchos serán omitidos por ambos controles), el método SubString() tomó 9598ms, y el método Double tomó 6754ms.

EDIT # 2: Editado en * 1000 en pruebas para asegurarse de que las iteraciones se estén ejecutando.

Código utilizado para probar la siguiente manera:

 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

¿Cuál es la forma más * eficiente *? – stacker

+0

@stacker - Tome ambos, y ejecútelos a través de un 'Cronómetro' y vea cuál es más rápido. –

+0

Diría que el 'Math.Pow' uno es mucho más lento, pero es solo una suposición, pruébelo con un' StopWatch'. – IVlad

3

En un DateTime, Milliseconds están siempre comprendido entre 0 y 999 por lo que no tiene nada que ver.

+2

Citando el enlace de MSDN que publiqué en mi respuesta "El componente milisegundos, expresado como un valor entre 0 y 999". Parece lógico que no puedas tener 32 días en un mes ni más de 999ms en un segundo. –

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

donde x su precisión

+0

Bueno, creo que he dado una respuesta fuera de contexto. sin embargo, pensé que estaba pidiendo Rounding. De todos modos, no puedo obtener lo que truncar significa incluso en números, de todos modos lo siento por no captar el contexto. –

Cuestiones relacionadas