diff --git a/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/Excel/Cells/XLCell.cs index 5909367..0dd21de 100644 --- a/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/Excel/Cells/XLCell.cs @@ -1615,8 +1615,8 @@ val = string.Empty; else if (value is DateTime) val = ((DateTime)value).ToString("o"); - else if (value is double) - val = ((double)value).ToInvariantString(); + else if (value.IsNumber()) + val = Convert.ToDecimal(value).ToInvariantString(); else val = value.ToString(); _richText = null; diff --git a/ClosedXML/Extensions.cs b/ClosedXML/Extensions.cs index 334b57b..aaca2a7 100644 --- a/ClosedXML/Extensions.cs +++ b/ClosedXML/Extensions.cs @@ -203,6 +203,20 @@ } + public static class DecimalExtensions + { + //All numbers are stored in XL files as invarient culture this is just a easy helper + public static String ToInvariantString(this Decimal value) + { + return value.ToString(CultureInfo.InvariantCulture); + } + + public static Decimal SaveRound(this Decimal value) + { + return Math.Round(value, 6); + } + } + public static class DoubleExtensions { //All numbers are stored in XL files as invarient culture this is just a easy helper @@ -310,5 +324,23 @@ return value.HasValue ? new DoubleValue(Math.Round(value, 6)) : value; } } + + public static class ObjectExtensions + { + public static bool IsNumber(this object value) + { + return value is sbyte + || value is byte + || value is short + || value is ushort + || value is int + || value is uint + || value is long + || value is ulong + || value is float + || value is double + || value is decimal; + } + } } diff --git a/ClosedXML_Examples/Misc/DataTypes.cs b/ClosedXML_Examples/Misc/DataTypes.cs index e4feeb1..14abad9 100644 --- a/ClosedXML_Examples/Misc/DataTypes.cs +++ b/ClosedXML_Examples/Misc/DataTypes.cs @@ -68,6 +68,17 @@ ro++; + ws.Cell(++ro, co).Value = "Decimal Number:"; + ws.Cell(ro, co + 1).Value = 123.45m; + + ws.Cell(++ro, co).Value = "Float Number:"; + ws.Cell(ro, co + 1).Value = 123.45f; + + ws.Cell(++ro, co).Value = "Double Number:"; + ws.Cell(ro, co + 1).Value = 123.45d; + + ro++; + ws.Cell(++ro, co).Value = "Explicit Text:"; ws.Cell(ro, co + 1).Value = "'Hello World."; @@ -192,7 +203,7 @@ .SetDataType(XLCellValues.DateTime) .SetDataType(XLCellValues.Boolean) .SetDataType(XLCellValues.Text); - + ws.Columns(2, 3).AdjustToContents(); workbook.SaveAs(filePath); diff --git a/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx b/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx index 5b29266..9b03a64 100644 --- a/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx +++ b/ClosedXML_Tests/Resource/Examples/Misc/DataTypes.xlsx Binary files differ diff --git a/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx b/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx index ca68eee..0221170 100644 --- a/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx +++ b/ClosedXML_Tests/Resource/Examples/Misc/DataTypesUnderDifferentCulture.xlsx Binary files differ