VarChar转换为十进制

时间:2014-06-19 13:53:39

标签: c# sql winforms

我的数据库中有一些记录,格式如下:例如: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();
                }
            }

2 个答案:

答案 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);