截断特定精度的数字的最有效方法是什么?

sta*_*ker 5 c# math int

截断特定精度的数字的最有效方法是什么?

Kyl*_*ndo 1

int ms = Convert.ToInt32(
             Convert.ToString(DateTime.Now.Millisecond).Substring(0, 3));
Run Code Online (Sandbox Code Playgroud)

或者

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

double Truncate = Math.Truncate((double)DateTime.Now.Millisecond / Length);
Run Code Online (Sandbox Code Playgroud)

编辑:

在我将发布的代码上运行下面的代码后,由于变量的重用,双倍方法效果很好。在 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();
Run Code Online (Sandbox Code Playgroud)