Что самый эффективный путь состоит в том, чтобы усечь число для определенной точности?
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);
РЕДАКТИРОВАТЬ:
После выполнения обоих приведенных ниже кодов я буду post, двойной метод хорошо работает из-за повторного использования переменных. На итерации 5 000 000 DateTime.Now (в которой многие из них будут пропущены при обеих проверках) метод SubString ()
занял 9598 мс, а метод Double
- 6754 мс.
РЕДАКТИРОВАТЬ №2: Отредактировано в * 1000 в тесты, чтобы убедиться, что итерации выполняются.
Для проверки используется следующий код:
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();
В DateTime
Миллисекунды всегда состоят из 0-999, поэтому вам нечего делать.
Math.Floor(num * Math.Pow(10, x) + 0.5) / Math.Pow(10, x)
Где x ваша точность