You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# DataTable写入Excel时,保留8位小数不显示的问题

解决C#通过DataTable导出Excel时decimal类型8位小数不显示的问题

核心问题:Excel默认的「常规」单元格格式会自动省略数值末尾的0,即使DataTable中存储的是保留8位小数的decimal,也会被Excel自动格式化显示。修改DataColumn的DataType只能保证数据存储类型,无法控制Excel的显示格式。

解决方案:设置Excel单元格的数字格式

根据你使用的Excel导出库,选择对应方式设置固定8位小数的格式:

1. 使用EPPlus库(主流开源库)

直接给目标列设置数字格式字符串"0.00000000":

// 假设ws是ExcelWorksheet实例,注意EPPlus的列索引从1开始,对应DataTable的第6列(索引6)
ws.Columns[7].Style.Numberformat.Format = "0.00000000";

2. 使用NPOI库

创建单元格样式并绑定到目标单元格:

// 初始化样式
var cellStyle = workbook.CreateCellStyle();
var dataFormat = workbook.CreateDataFormat();
cellStyle.DataFormat = dataFormat.GetFormat("0.00000000");

// 遍历DataRow写入Excel时,给对应单元格应用样式
foreach (DataRow dr in dt.Rows)
{
    var excelRow = sheet.CreateRow(sheet.LastRowNum + 1);
    var targetCell = excelRow.CreateCell(6); // 对应DataTable的第6列
    targetCell.SetCellValue((decimal)dr[6]);
    targetCell.CellStyle = cellStyle;
}

3. 若使用GridView导出(Web场景)

在GridView的绑定列中设置DataFormatString:

<asp:BoundField 
    DataField="YourDecimalColumnName" 
    DataFormatString="{0:N8}" 
    HtmlEncode="False" 
    HeaderText="数值" />

验证数据本身的正确性

先确认DataTable中的值确实保留了8位小数:

// 输出到控制台验证
Console.WriteLine(dr[6].ToString("N8"));

如果输出是124.73000000,说明数据存储没问题,只需调整Excel的显示格式即可。

内容的提问来源于stack exchange,提问作者Cloud9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:47:02