28

我有一个double[]正在执行 LINQ 操作的:

MD = MD.Select(n => n * 100 / MD.Sum()).ToArray();

在某些情况下, 的所有元素MD都为 0,然后Sum也为零。然后0 * 100 = 0 / 0,但它没有给出除零异常或任何异常。为什么会这样?

4

3 回答 3

43

尝试这个:

double x = 0.0;
double y = 1.0;
double z = y / x;

这也不会抛出异常:它将保持z正无穷大。这里没有特定于 LINQ 的内容 - 它只是 IEEE-754 浮点算术行为。

在您的情况下,您将零除以零,因此您最终得到的不是数字。

于 2012-04-20T08:05:25.610 回答
5

IEEE-754 浮点运算:

using System;
using System.Linq;

namespace ConsoleApplication1 {
    internal class Program {
        private static void Main() {
            var MD = new double [] {0, 0, 0, 0, 0};
            var result = MD.Select(n => n*100/MD.Sum()).ToArray();
            foreach (var item in result) {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
    }
}

输出:

NaN
NaN
NaN
NaN
NaN
于 2012-04-20T11:44:57.577 回答
0

Sum零是因为MD不包含任何元素吗?在这种情况下,不会执行 lambda 表达式。

于 2012-04-20T08:05:33.880 回答