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

使用NPOI生成Excel时价格字段格式化异常问题咨询

问题根因

该问题是价格字符串转数值时的解析规则不匹配导致的:你传入的价格字符串使用逗号作为小数分隔符(如422,26),但double.Parse()默认使用当前系统线程的区域设置解析。如果当前运行环境的区域配置中,逗号是千分位分隔符、小数点用点表示,解析时就会把422,26中的逗号识别为千分位分隔符直接忽略,最终解析出数值42226,格式化后就显示为42226,00。
而380,00、4730,00看起来运行正常属于巧合,本质上也存在解析规则不匹配的隐患,只要运行环境的区域设置变化就会出问题。

修复方案

步骤1:显式定义价格解析的格式规则

在处理价格的代码前,先定义适配你价格格式的数字解析规则,避免受系统区域设置影响:

using System.Globalization;

// 配置规则:逗号为小数分隔符,点为千分位分隔符,适配你传入的价格字符串格式
var priceParseFormat = new NumberFormatInfo
{
    NumberDecimalSeparator = ",",
    NumberGroupSeparator = "."
};

步骤2:修改价格解析逻辑

把所有double.Parse(item.Price)的调用,都加上上面定义的格式提供者,同时可以优化冗余代码:

else
{
    ICell priceCell = row.CreateCell(1);
    // 不需要手动设置CellType,传入double类型值NPOI会自动设置为Numeric类型
    priceCell.CellStyle = priceCellStyle;

    // 用自定义规则解析价格字符串
    double originalPrice = double.Parse(item.Price, priceParseFormat);
    if (percentage != 0)
    {
        priceCell.SetCellValue(originalPrice * (1 + (double)percentage / 100));
    }
    else
    {
        priceCell.SetCellValue(originalPrice);
    }
}

可选:强制Excel固定显示逗号为小数分隔符

如果你需要不管用户打开Excel的区域设置是什么,价格都固定用逗号作为小数分隔符,可以把价格样式的格式串修改为指定区域的格式:

// 固定使用德语区域格式,永远显示逗号为小数分隔符
priceCellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("[$-de-DE]#,##0.00");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:15:03