【问题标题】:C# using odbcDataReader: Change decimal seperator from "." to "," in Decimal valueC# 使用 odbcDataReader:从“.”更改小数分隔符以“,”为十进制值
【发布时间】:2017-11-23 14:28:00
【问题描述】:

当我尝试将 odbcDataReader 中的值分配给“十进制”变量时,它会删除十进制分隔符“,”。该值本身以小数形式存储在我从中检索数据的数据库中。我曾尝试像这样使用 CultureInfo:

   CultureInfo myCI = new CultureInfo("en-US", false);
   myCI.NumberFormat.NumberDecimalSeparator = ",";
   OdbcDataReader Reader = null;
   OdbcCommand cmd = new OdbcCommand("...");
   cmd.Connection = cn;
   Reader = cmd.ExecuteReader();
          if (Reader.HasRows)
                {
                    while (Reader.Read())
                    {
                        *(decimal variable)* p = Convert.ToDecimal(Reader["Decimal Value"], myCI);
                    }
                }

如果有意义的话,我位于欧盟,我们的默认十进制分隔符是“,”,但我必须连接到另一个使用“。”的数据库。作为小数分隔符,所以我不能将默认小数设置更改为“,”,我只需要让这个值使用“,”作为小数分隔符。我觉得我的问题出在 CultureInfo 中,但找不到明确的解决方案。

希望这是有道理的,谢谢。

【问题讨论】:

  • 删除它是什么意思?什么是样本十进制数?它在你的数据库中是什么,它是什么 C#?一般没有格式。看来您将字符串与小数混淆了。你可以用你喜欢的任何格式显示小数。
  • 您的变量p 没有小数点分隔符,任何decimal 也没有。唯一需要分隔符的时候是在前端显示值时。你想解决什么问题?
  • 你能告诉我:Reader["Decimal Value"].GetType().Name 返回什么?基本上:这里的潜在价值是什么? decimal 没有格式的概念 - 它只是一个纯数字。顺便说一句 - 更改格式信息的部分通常是一个非常糟糕的主意 - 为什么不获取与您期望的模式匹配的特定文化信息?
  • 数据库值为 '0,400',如果我使用我的代码,变量 'p' 被赋值为 '4'。 “获取与您期望的模式相匹配的特定文化信息”是什么意思?
  • @Witloofdc 那么它已经是一个小数了 - 没有什么可以解析的,再多的文化信息也不会产生任何影响。这里的Convert.ToDecimal 基本上会说“但是......它已经是一个小数 - 在这里,把它拿回来!”即if(val is decimal) return (decimal)val;

标签: c# database-connection decimalformat


【解决方案1】:

你可以试试;

while (Reader.Read())
{
*(decimal variable)* p = Convert.ToDecimal(Reader["Decimal Value"], myCI);
}

到

while (Reader.Read())
{
    decimal p = 0;

    decimal.TryParse(Reader["ColumnName"].ToString().Replace('.',','), out p);
}

或

while (Reader.Read())
{
    double p = double.Parse(Reader["ColumnName"].ToString(), CultureInfo.InvariantCulture);
}

【讨论】:

    【解决方案2】:

    Decimal 变量是我的错误选择,我已将其更改为双精度,并且代码 p = Reader.GetDouble(Reader.GetOrdinal("Value")); 可以正常工作。

    感谢您的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2021-05-26
      相关资源
      最近更新 更多