2016-07-06 3 views
-1

Добрый день, у меня есть приложение MVC, которое загружает файл excel с использованием Open XML. Файл имеет значения deciml, которые я передаю обратно в представление, однако, когда я объявляю приложение на сервер, он возвращает значения с последующими десятичными знаками, например 292,28 возвращается как 292.27999999999997 и 85,7703 возвращается как 85.770300000000006. Я попытался добавить формат номера в код, но он, похоже, не работает, см. Мой код нижеMVC Глобализация культуры Формат десятичного числа с использованием OPEN XML

Здесь я сопоставляю свои значения 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; 
} 

Я установить десятичное поле как знаки после запятой 3 в моей базе данных SQL, но его по-прежнему возвращает неправильное десятичное значение, а также неправильное форматирование.

Любые идеи относительно того, как я могу это исправить, вроде считает

ответ

0

Надежда эта помощь:

string stringNumber = "0.1230000"; 

decimal decimalNumber = decimal.Parse(stringNumber, CultureInfo.InvariantCulture);//or another culture 

decimal roundedNuber = decimal.Round(decimalNumber, 3); 
Смежные вопросы