从字符串转换为十进制消除了c#中的spl字符

时间:2017-02-13 12:29:22

标签: c# asp.net sql-server excel

下面是我的代码,用于读取开放式办公室电子表格数据并插入数据库我有三列类型字符串和四列类型为小数,所以我将它们从第四列转换为小数使用下面代码

//newly added
if (iCol > 2)
   {
       string value = ((XText)oSheet.getCellByPosition(iCol, iRow)).getString();
       decimal vv = Convert.ToDecimal(value);
       drNew[i] = vv;
       i++;
   }
   else
   {
       drNew[i] = ((XText)oSheet.getCellByPosition(iCol, iRow)).getString();//old code
       i++;//old code
   }

但问题是十进制我有特殊字符,如$和,如下所示

$25,529.98
$1,61,800.52
$0.00
$7,252.80

但是我的上面的代码插入发生如下所示

25529.9800
161800.5200
0.0000
7252.8000

我也试过以下代码

     `if (iCol > 2) 
      { 
     string value = ((XText)oSheet.getCellByPosition(iCol, iRow)).getString(); 
     if (Decimal.TryParse(value, out number)) 
      { 
      drNew[i] = value.ToString(); i++; 
      } 

  }

`但它完全没有进入if条件

如何使用$插入数据。并且,在数据库中。

1 个答案:

答案 0 :(得分:2)

我很高兴:

dt.Columns.Add("Payment", typeof(decimal));

这表明您使用的是正确的类型来存储数据。

但是你对如何存储一个值有很深的误解。

您是否看到$25,529.9825529.9800只是格式化输出的问题。存储的值是二进制位图,人类读者几乎无法解释。无论何时向您或您的应用程序呈现此类值,都会将转换(= 格式化)转换为人类可读字符串。您应该感到高兴,您的格式不会与值一起存储!

此格式问题是您的表示层/报告引擎应该作为最后一步执行的操作。