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

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

5
задан stacker 20 May 2010 в 09:37
поделиться

3 ответа

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();
1
ответ дан 15 December 2019 в 00:52
поделиться

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

3
ответ дан 15 December 2019 в 00:52
поделиться
Math.Floor(num * Math.Pow(10, x) + 0.5) / Math.Pow(10, x)

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

0
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: