我有一个问题,其中十进制0,当转换为字符串时,添加千位分隔符(丹麦格式判断其他值如何转换)和大量的尾随0。 从我到目前为止的数据来看,它看起来与数据来自MSSQL这一事实有关,但这只是我的猜测。
我正在做的是:
显示应用程序内的数据没有问题,但在Excel中我们遇到上述问题,其中十进制值0显示为0.00000000000000000000
首先,使用以下代码将所有值转换为字符串。
string.Format(CultureInfo.InvariantCulture, "{0}", obj);
像0.1这样的值以0,1(丹麦语格式)保存到Excel中,并在单元格中显示为0,100,正如预期的那样,但所有0值都存储并显示为0.00000000000000000000。
在上面的代码中设置断点显示 obj 为0,如果我将其转换为小数,则为零,但只要我将其转换为字符串,我就得到上面的表示,如果我使用Invariant culture,da-DK或en-US,这无所谓。
有趣的是,如果我在步骤3和步骤4之间添加一些代码(见下文),将所有0值替换为新的0值,则该值将被正确转换并在Excel中显示为0
foreach (DataRow row in projektTable.Rows)
foreach (DataColumn column in projektTable.Columns)
if (column.DataType == typeof(decimal))
if (row.Field<decimal>(column) == 0)
row.SetField<decimal>(column, 0);
我希望有人能够提供我所缺乏的精彩见解,因为我不明白为什么2位小数0可以转换为2种不同的字符串表示形式。
编辑:抱歉忘记了数据库类型。该列是小数(18,4)。
编辑2:要清楚。在任何时候我都不会做像decimal.Parse或类似的东西。 数据i通过EF加载,因此数据类型是强类型的,因为实体上的属性。然后将数据加载到DataTable中 - 使用属性上的反射找到列的类型。 然后使用行[rowX] [columnX]将数据写入Excel,以将值作为对象获取(如果值为十进制,日期时间,字符串等,则不关心)。然后使用上面发布的string.Format()代码将该对象转换为字符串。