将 DataRow 值转换为浮点数

问题描述 投票:0回答:4

我正在使用

DataRow
,我想将行中的每个值除以一个数字(取自同一行的单元格)。我一直在寻找将值转换为浮点数的方法,例如来自 this 线程,但是转换给了我“指定的转换无效”错误。

List<DataTable> tblsol = new List<DataTable>();
DataTable now = tblsol.Last();

while (true)
        {
            DataRow fb = now.Rows[v];
            DataRow fb2 = now.Rows[w];
            float akun = (float)fb[fb.Table.Columns.Count - 1] /
            (float)fb[u];
            if (akun > (float)fb2[fb2.Table.Columns.Count - 1] /
            (float)fb2[u])
            {
                if (w == now.Rows.Count - 1) { v = w; break; }
                else { v++; w++; }
            }
            else 
            {
                if (w == now.Rows.Count - 1) { break; }
                else { w++; }

            }
        }

        DataRow bk = now.Rows[v];

        float angkun = Convert.ToSingle(bk[u]);
        for (int dc = 1; dc < now.Columns.Count;dc++)
        {
            bk[dc] = Convert.ToSingle(bk[dc]) / angkun;
        }

我使用了两种方法将值转换为浮点数(使用

Convert.toSingle
和转换),但这两种方法都给了我错误。我还有什么可以做的吗?或者我的代码可能有问题?
附注
tblSol
不为空,所有变量都已声明。

c# casting datarow
4个回答
1
投票

正如我的评论中所述,请尝试首先将相关列转换为

Decimal
。它是从 DataRow 实例的列访问数据时明确支持的数据类型之一; MSDN DataColumn 参考页面

中列出了有效类型

1
投票

尝试 float.Parse,但您需要将数据行转换为动态/字符串类型以使其兼容:

var test = (dynamic)fb[fb.Table.Columns.Count - 1];
float boat = float.Parse(test);

或类似的东西使用

float.Parse


1
投票

你可以像这样将其转换为

String
后尝试,

float akun = float.Parse(fb[fb.Table.Columns.Count - 1].ToString()) /
        float.Parse(fb[u].ToString());

0
投票

您可以使用

DataRowExtensions
中的扩展。即

using System.Data;

////
float akun = fb.Fields<float>(fb.Table.Columns.Count - 1) /
            fb.Fields<float>(u);
////

https://learn.microsoft.com/en-us/dotnet/api/system.data.datarowextensions

© www.soinside.com 2019 - 2024. All rights reserved.