使用 OPEN XML 的 MVC 全球化区域性十进制数格式
本文关键字:区域性 十进制数 格式 全球化 MVC OPEN XML 使用 | 更新日期: 2023-09-27 17:55:31
美好的一天,我有一个MVC应用程序,它使用Open XML上传一个excel文件。该文件具有我传递回视图的十进制值,但是当我将应用程序发送到服务器时,它会返回带有前进小数位的值,例如 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 的小数位,但它仍然返回不正确的十进制值,格式不正确。
关于我如何解决这个问题的任何想法,亲切的问候
希望这有帮助:
string stringNumber = "0.1230000";
decimal decimalNumber = decimal.Parse(stringNumber, CultureInfo.InvariantCulture);//or another culture
decimal roundedNuber = decimal.Round(decimalNumber, 3);