有效转换特定值的方法

Eri*_*man 1 .net c# parsing casting rounding

所以我要说我有一个字符串数组:

string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };
Run Code Online (Sandbox Code Playgroud)

让我们说我必须遍历这些值并执行以下操作:

  1. 将它舍入到最接近的偶数(如果它只是一个双数)

  2. 四舍五入后删除数字的小数部分.

  3. 如果数字为负数,请删除该符号.

string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };

for (int i = 0; i < values.Length; i++)
{
    file[i].Value = ((Int32)Math.Abs(Math.Round(Double.Parse(values[i]), MidpointRounding.ToEven))).ToString();
}
Run Code Online (Sandbox Code Playgroud)

这与基本相同:

string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };

for (int i = 0; i < values.Length; i++)
{
    String strValue = values[j];
    Double dblValue = Double.Parse(strValue);
    Double dblRoundedValue = Double.Parse(dblValue);
    Int32 intValue = (Int32)dblRoundedValue;
    Int32 intAbsValue = Math.Abs(intValue);
    String finalValue = intAbsValue.ToString();

    file[i].Value = finalValue;
}
Run Code Online (Sandbox Code Playgroud)

该阵列中可能有超过一百万个值,那么有没有办法使这个过程更有效?

And*_*per 5

此操作本质上是可并行化的(如果这是一个单词).一个Parallel.ForEach循环,并行LINQ管道,或者类似的东西,将提高执行时间.

string[] values = new[] { "1", "2", "3", "1.5", "56.5", "8" };

var file = values.AsParallel()
                 .Select(s => Double.Parse(s))
                 .Select(d => (int)Math.Round(d))
                 .Select(i => Math.Abs(i).ToString())
                 .ToArray();
Run Code Online (Sandbox Code Playgroud)