【发布时间】: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