将double [] []类型转换为float

时间:2012-06-04 23:06:19

标签: c# asp.net .net

我有一个功能签名,如:

static public double[][] G2Sweep(int row1, int row2, double[][] mtx)
{
    mtx = (float) mtx;
}

但我需要将double [] []矩阵转换为浮点值。这是如何完成的,因为代码无法显式转换它?

6 个答案:

答案 0 :(得分:5)

public static float[][] Convert(double[][] mtx)
{
    var floatMtx = new float[mtx.Length][];
    for (int i = 0; i < mtx.Length; i++)
    {
        floatMtx[i] = new float[mtx[i].Length];
        for (int j = 0; j < mtx[i].Length; j++)
            floatMtx[i][j] = (float)mtx[i][j];
    }
    return floatMtx;
}

或者:

public static float[][] Convert(double[][] mtx)
{
    return mtx.Select(i => i.Select(j => (float)j).ToArray()).ToArray();
}

答案 1 :(得分:4)

不,你不能将double转换为float,特别是对于数组。您需要创建具有正确类型的副本。

答案 2 :(得分:1)

  

是的所有值都要浮动,但我不想做一个for循环来重复所有

嗯,抱歉,但你不能。将数组转换为float(或int,或String,或MonkeyPoo或其他类型的类型是没有意义的。如果你需要查看数组中的每个值,那么你需要一个循环。没有绕过那个事实。

Lamdas以及诸如此类的东西都归结为循环。你只需要咬住子弹A和转换循环(或使用像.Cast<float>之类的东西),或者使用正确的类型开始。

答案 3 :(得分:1)

确实你 cant 转换到位并且你必须遍历这些值。

然而,现在说内存便宜是公平的。

创建double [] []变量时;为什么不简单地同时创建一个float [] [],所以转换是在一个地方完成的。

在生命周期的其余部分中,您可以将写入数组用于写入任务。

那说,你能澄清为什么你需要一个独特的浮点数和双数组吗?

*公平但不一定可以接受;如果它是一个托管在自己的盒子或虚拟图像上的webapp;那很好。如果这是一个独立的应用程序,可能必须在上网本或某个地方的Silverlight上工作,这是不公平或没有。

答案 4 :(得分:1)

另一种方法是使用Array.ConvertAll方法:

Array.ConvertAll<double, float>(doubles, d => (float)d);

是否进行相同的循环和显式转换,但看起来更好。

答案 5 :(得分:-1)

如果使用Linq,可以避免手动编写循环。

float[][] floats = mtx.Select(r=>r.Select(Convert.ToSingle).ToArray()).ToArray();

编辑:修复。