C# Excel文件上载更改数据类型
我必须上传excel文件,我有一个格式正确的excel文件,我有一个包含大量数字的列,所以在excel中,它用指数显示数字,例如我有这个值8.99681E+18(8996812351321100000) 我通过在运行时读取数据表来生成数据表,在生成数据表之后,该值被更改为(8996812351321100288)。 我就是这样做的C# Excel文件上载更改数据类型,c#,C#,我必须上传excel文件,我有一个格式正确的excel文件,我有一个包含大量数字的列,所以在excel中,它用指数显示数字,例如我有这个值8.99681E+18(8996812351321100000) 我通过在运行时读取数据表来生成数据表,在生成数据表之后,该值被更改为(8996812351321100288)。 我就是这样做的 var conn = new OleDbConnection(); if (fileExtension == ".xls") //4.0 Connect
var conn = new OleDbConnection();
if (fileExtension == ".xls")
//4.0 Connection String
if (fileExtension == ".xlsx")
//12.0 Connection String
conn.Open();
DataTable dtSheets = conn.GetSchema("Tables");
string firstSheet = dtSheets.Rows[0]["TABLE_NAME"].ToString();
using (var comm = new OleDbCommand())
{
comm.CommandText = "select * from [" + firstSheet + "]";
comm.Connection = conn;
using (var da = new OleDbDataAdapter())
{
da.SelectCommand = comm;
da.Fill(dt);
if (dt.Columns.Contains("SIMNo"))
{
DataTable dtCloned = dt.Clone();
dtCloned.Columns["SIMNo"].DataType = typeof(Int64);
foreach (DataRow row in dt.Rows)
{
dtCloned.ImportRow(row);
}
return dtCloned;
}
return dt;
}
}
在创建DataTable之前,有没有一种方法可以在运行时更改SIMNo的数据类型?我该怎么做 将
8996812351321100000.0
转换为Int64
会产生精确的舍入误差
(Int64)8996812351321100000.0 // == 8996812351321100288
相反,请使用
decimal
数据类型,因为它旨在表示十进制数字,而不存在舍入问题。或者,因为它是一个不会应用任何算术运算的数字,所以只需使用字符串我认为,BigInt应该会有所帮助
http://www.carljohansen.co.uk/bigint/.
将8996812351321100000从一个多头铸造到一个双倍,产生89968123513211E+18,这是你想要的,而不是你试图在这里做的吗?问题发生在哪里?是在dt
中还是在dtCloned
中?@TimRogers其在dtCloned中我将8996812351321e+18转换为双精度,它给我8996812351321100288而不是89968123513211000000,所以我应该使用十进制或字符串而不是Int64?字符串转换是将数字作为指数,我希望它没有指数(8996812351321100000)(无小数)@SyedSalmanRazaZaidi手动转换或使用decimal
。