2010-05-20 4 views

답변

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

또는

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

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

편집 :

내가 게시 할 예정입니다 코드를 모두 아래 실행 한 후, 이중 방법이 잘 때문에 변수의 재사용으로 작동합니다. 5,000,000 DateTime.Now (두 검사에 의해 건너 뛸 수 있음)의 반복 동안 SubString() 메서드는 9598ms를 사용했으며 Double 메서드는 6754ms를 사용했습니다.

EDIT # 2 : * 1000으로 편집하여 테스트를 반복하여 반복 실행 여부를 확인하십시오. 다음과 같이 테스트하는 데 사용

코드하십시오 DateTime에서

 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

가장 효율적인 * 방법은 무엇입니까? – stacker

+0

@stacker - 두 가지를 모두 가져 와서 'Stopwatch'를 통해 실행하고 더 빠른 것을 확인하십시오. –

+0

'Math.Pow'가 훨씬 느리지 만'StopWatch'로 테스트 해보십시오. – IVlad

3

Milliseconds는 항상 당신이 아무 상관이없는 0에서 999 사이에 구성된다. 일부는 ESP 일이 일어나고있다처럼 정밀 다른 답변에서

+2

나는 게시 한 MSDN 링크를 인용한다. 내 대답은 "0에서 999 사이의 값으로 표시되는 밀리 초 구성 요소입니다." 1 달에 32 일, 1 초에 999 밀리 초를 가질 수 없다는 것은 논리적 인 것처럼 보입니다. –

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

, 그것은 보인다. 나는 초능력이 아니야, 정교하게 말해 줄 수 있니?
+0

글쎄, 나는 문맥에서 답을 주었다고 생각한다. 그러나 나는 당신이 반올림을 요구하고 있다고 생각했다. 어쨌든 나는 숫자를 잘라내는 것을 얻을 수 없다. 어쨌든 문맥을 파악하지 못해서 미안하다. –

관련 문제