当我使用OleDbDataReader将工作表读入DataTable时,浮点数会失去其精度。
我试图强制OleDb将excel数据作为字符串读取,但是虽然数据现在包含在DataRow中,每个列定义为System.String但它会失去精度(18.125 - > 18.124962832)。
知道如何避免这种行为吗?
答案 0 :(得分:2)
我刚测试了您的数据,此处发布的method工作正常 即,当放入DataSet时,单元格值保持精度为18.124962832。
答案 1 :(得分:0)
我很确定Jet会尝试根据它在前五行中看到的内容为每列分配数据类型。如果前五行之后的某些内容不属于该数据类型,它将转换它或者根本不返回任何内容。
电子表格的前五行的精度是否低于开始截断的项目?
答案 2 :(得分:-3)
以下代码的输出显示了如何使用SpreadsheetGear for .NET获取基础数字和格式化文本:
以下是代码的输出:
x=18.124962832 y=18.124962832 formattedText=18.125
以下是代码:
namespace Program
{
class Program
{
static void Main(string[] args)
{
// Create a new workbook and get a reference to Sheet1!A1.
var workbook = SpreadsheetGear.Factory.GetWorkbook();
var sheet1 = workbook.Worksheets[0];
var a1 = workbook.Worksheets[0].Cells["A1"];
// Put the number in the cell.
double x = 18.124962832;
a1.Value = x;
a1.NumberFormat = "0.000";
double y = (double)a1.Value;
string formattedText = a1.Text;
System.Console.WriteLine("x={0} y={1} formattedText={2}", x, y, formattedText);
}
}
}
您可以查看实时的SpreadsheetGear示例here并下载免费试用here。
免责声明:我拥有SpreadsheetGear LLC