【问题标题】:MVC Globalization Culture Decimal Number Format using OPEN XML使用 OPEN XML 的 MVC 全球化文化十进制数格式
【发布时间】:2016-07-06 14:13:11
【问题描述】:

您好,我有一个使用 Open XML 上传 excel 文件的 MVC 应用程序。该文件具有我传递回视图的十进制值,但是当我将应用程序部署到服务器时,它返回带有小数位的值,例如 292,28 返回为 292.279999999999997 和 85,7703 返回为 85.770300000000006。我尝试在代码中添加数字格式,但它似乎不起作用,请参阅下面的代码

在这里,我将我的 excel 值映射到我的对象。

 private static CleanSupplierClaim MappExcelOpenXMLtoGenericList(IList<string> rowData, IList<string> columnNames)
    {


        var cleanSupplierClaims = new CleanSupplierClaim()
        {
            Action = rowData[columnNames.IndexFor("Action")],
            Line_Number = rowData[columnNames.IndexFor("Lineno")],
            Total_Claim = rowData[columnNames.IndexFor("TotalClaim")].ToDecimalNullable(), //Convert.ToDecimal(Math.Round(Convert.ToDouble(rowData[columnNames.IndexFor("TotalClaim")].ToDoubleNullable()),2)),
            Currency = rowData[columnNames.IndexFor("Currency")],
            ClaimReference = rowData[columnNames.IndexFor("ClaimReference")]
        };

        return cleanSupplierClaims;
    }

在这里我获取单元格值并尝试格式化从文件中获取的十进制类型

private static string GetCellValue(SpreadsheetDocument document, Cell cell)
{
    var culture = new CultureInfo("en-us");
    culture.NumberFormat.CurrencyDecimalDigits = 3;

    if (cell == null) return null;
    string value = cell.InnerText;

    //Process values particularly for those data types.
    if (cell.DataType != null)
    {
        switch (cell.DataType.Value)
        {
            //Obtain values from shared string table.
            case CellValues.SharedString:
                var sstPart = document.WorkbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
                value = sstPart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText.Trim();
                break;

            //Optional boolean conversion.
            case CellValues.Boolean:
                var booleanToBit = ConfigurationManager.AppSettings["BooleanToBit"];
                if (booleanToBit != "Y")
                {
                    value = value == "0" ? "FALSE" : "TRUE";
                }
                break;






                //specifire = "F";
            case CellValues.Number:
                return Convert.ToDecimal(cell.CellValue.Text).ToString(culture);
            default:
                if (cell.CellValue != null)
                    return cell.CellValue.Text;
                return string.Empty;

        }
    }
    return value;
}

我已在我的 sql 数据库中将小数字段设置为 3 的小数位,但它仍然返回不正确的十进制值,以及不正确的格式。

关于如何解决这个问题的任何想法,亲切的问候

【问题讨论】:

    标签: c# model-view-controller openxml cultureinfo


    【解决方案1】:

    希望得到帮助:

     string stringNumber = "0.1230000";
    
     decimal decimalNumber = decimal.Parse(stringNumber, CultureInfo.InvariantCulture);//or another culture
    
     decimal roundedNuber = decimal.Round(decimalNumber, 3);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2011-07-09
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 2019-04-30
      相关资源
      最近更新 更多