Jaki jest najbardziej skuteczny sposób obcięcia liczby dla określonej dokładności?Jaki jest najskuteczniejszy sposób obcięcia numeru dla określonej dokładności?
Odpowiedz
int ms = Convert.ToInt32(
Convert.ToString(DateTime.Now.Millisecond).Substring(0, 3));
lub
double Length = Math.Pow(10, (DateTime.Now.Millisecond.ToString().Length - 3));
double Truncate = Math.Truncate((double)DateTime.Now.Millisecond/Length);
EDIT:
Po uruchomieniu zarówno poniżej na kodzie będę po, podwójna metoda działa dobrze z powodu ponownego użycia zmiennych. W iteracji 5000 000 dni DateTime.Now (w której wiele zostanie pominiętych przez obie kontrole), metoda SubString()
trwała 9598 ms, a metoda Double
zajęła 6754 ms.
EDYCJA # 2: Edytowano w * 1000 do testów, aby upewnić się, że iteracje są uruchomione.
kod używany do testowania następująco:
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();
W DateTime
, Milliseconds zawsze zawiera się między 0 a 999, więc nie mam nic do roboty.
Cytując link MSDN Wysłałem w mojej odpowiedzi "Składnik milisekundowy wyrażony jako wartość z przedziału od 0 do 999". Wydaje się logiczne, że nie możesz mieć 32 dni w miesiącu ani więcej niż 999 ms w ciągu sekundy. –
Math.Floor(num * Math.Pow(10, x) + 0.5)/Math.Pow(10, x)
gdzie x precyzję
Cóż, myślę, że dałem odpowiedź z kontekstu. jednak myślałem, że pytasz o zaokrąglanie, w każdym razie nie mogę dostać to, co obcina nawet w liczbach, w każdym razie przepraszam za brak kontekstu. –
Z innych odpowiedzi, wydaje się, że istnieje jakiś ESP tu dzieje. Nie jestem medium, proszę, rozwiąż to. – leppie
@leppie: Od wersji 1: "Chcę uzyskać tylko 3 cyfry milisekund System.DateTime." –