我的数据库中有一些记录,格式如下:例如:04567.123 数据类型是VarChar。 因此,当我通过我的C#应用程序访问它们时,我需要将数字加到最后三个,例如“04567.124”,但我遇到了麻烦。我使用以下代码尝试转换值,然后+1
using (SqlDataReader read1 = cmd1.ExecuteReader())
{
while (read1.Read())
{
string num1 = (read1["NumeroDossier"].ToString());
decimal ndos = Convert.ToDecimal(num1 + 1);
textBox10.Text = ndos.ToString();
}
}
但它给了我一个错误,一个格式错误,我无法弄明白:\ 有人可以问我吗?非常感谢!
EDIT1:
string num1 = (read1["NumeroDossier"].ToString());
decimal ndos = Convert.ToDecimal(num1, CultureInfo.InvariantCulture);
decimal total = ndos += (0.001);
textBox10.Text = total.ToString();
解决方案(非常感谢Habib):
using (SqlDataReader read1 = cmd1.ExecuteReader())
{
while (read1.Read())
{
string num1 = (read1["NumeroDossier"].ToString());
decimal ndos = Convert.ToDecimal(num1, CultureInfo.InvariantCulture);
decimal total = ndos += 0.001M;
textBox10.Text = total.ToString();
}
}
答案 0 :(得分:2)
问题在于这一行:
decimal ndos = Convert.ToDecimal(num1 + 1);
假设num1
设置为"04567.123"
,则添加1将返回字符串"04567.1231"
,它不会像您假设的那样递增最后一位数字。
仍然不应该因格式导致转换错误。 我相信您使用的是使用不同小数点分隔符的文化,然后是.
。你应该这样做:
decimal ndos = Convert.ToDecimal(num1, CultureInfo.InvariantCulture);
您不需要将1
添加到您的号码中您需要0.001M
ndos += 0.001M; //M for decimal
您也可以考虑使用decimal.TryParse
方法。
答案 1 :(得分:0)
这种逻辑可以让你到达你需要的地方。
我认为主要问题是你没有在添加1之前将num1转换为小数,这会给你一个转换错误。如果你想添加到最后你也不能使用+1,你可以使用decimal.Add代替添加0.001,如图所示。
string num1 = "1.123";
decimal ndos = 0;
decimal.TryParse(num1, out ndos);
ndos = decimal.Add(ndos, (decimal)0.001);