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

时间:2010-05-20 09:02:21

标签: c# math int

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

3 个答案:

答案 0 :(得分:3)

DateTime中,Milliseconds总是介于0到999之间,因此您无需执行任何操作。

答案 1 :(得分:1)

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);

编辑:

在我将发布的代码上运行以下两者之后,由于重用了变量,double方法运行良好。在5,000,000 DateTime.Now的迭代中(两次检查都会跳过多次),SubString()方法花费9598ms,Double方法花费6754ms。

编辑#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();

答案 2 :(得分:0)

Math.Floor(num * Math.Pow(10, x) + 0.5) / Math.Pow(10, x)

其中x你的精确度