Какой самый эффективный способ обрезать число для определенной точности? - PullRequest
5 голосов
/ 20 мая 2010

Какой самый эффективный способ обрезать число для определенной точности?

Ответы [ 3 ]

3 голосов
/ 20 мая 2010

В DateTime, Миллисекунды всегда составляют от 0 до 999, поэтому вам нечего делать.

1 голос
/ 20 мая 2010
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);

EDIT:

После выполнения обоих приведенных ниже кодов, которые я опубликую, метод double хорошо работает благодаря повторному использованию переменных. За итерацию 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();
0 голосов
/ 20 мая 2010
Math.Floor(num * Math.Pow(10, x) + 0.5) / Math.Pow(10, x)

Где х ваша точность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...