【问题标题】:GetDecimal() does not consider comma for decimal separation in C#GetDecimal() 在 C# 中不考虑用逗号分隔小数点
【发布时间】:2012-08-13 07:34:03
【问题描述】:

我们在冰岛的生产数据库 (SQL Server 2008R2) 使用逗号 (,) 作为小数分隔符存储 sqlmoney 列值(示例 54,12 和 85,00)。我们的应用程序(C#,ASP.Net)使用 SqlDatareader 读取值,代码如下。

decimal testVal=dr.GetDecimal(idxAmountUSD)//IdxAmountUSD is sqlmoney value

现在它不考虑逗号(,)作为小数分隔符并返回为 5412 和 8500。

实际上它应该返回为 54.12 & 85.12。

【问题讨论】:

  • C# decimal separator? 的可能重复项
  • 您没有使用ToDecimal(建议使用Convert.ToDecimal),您使用的是GetDecimal。这不应该涉及任何字符串到十进制的转换,也不应该涉及任何小数分隔符。您的查询是什么样的?它返回一个十进制类型,还是一个字符串?
  • sqlmoney 是 CLR 类型。 Db中实际列的定义是什么?
  • @FilipEkberg 不,不是重复,这不是显示小数,而是小数得到错误的值。
  • 它应该返回十进制值。而数据库列类型是钱。

标签: c# ado.net type-conversion decimal


【解决方案1】:

您需要在创建 SQLDataReader 实例之前定义您的文化:

Application.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("yourCulture");

【讨论】:

    【解决方案2】:

    您需要阅读特定的数据文化,先定义文化,然后再阅读数据

    Thread.CurrentThread.CurrentCulture = new CultureInfo("is-IS"); //is-IS is an iceland culture (where , is used inplace of .) .
    // following line remains same
    decimal testVal=dr.GetDecimal(idxAmountUSD)//IdxAmountUSD is sqlmoney value
    

    上面的代码我没有测试,但逻辑上是正确的。

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2017-09-30
      • 2014-01-04
      • 2015-10-15
      相关资源
      最近更新 更多