为特定准确度截断数字的最有效方法是什么?
答案 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你的精确度