将十进制从文本框转换为带小数点后2位的变量

时间:2017-01-23 15:49:13

标签: c# winforms

我开发winform应用程序,我需要帮助来解决这个问题。当我插入值为33.5的textBoxt然后我将我的值保存在textBox上我的程序中的双变量,但在我的textBox转换为double后,变量中的值是335而不是33.5,这是我的代码

private void btntambahMUN_Click(object sender, EventArgs e)
    {
        if (txtmat.Text == "")
        {
            errorProvider1.Clear();
            errorProvider1.SetError(txtmat, "Masukkan Nilai Matematika");
        }
        else if (txtipa.Text == "")
        {
            errorProvider1.Clear();
            errorProvider1.SetError(txtipa, "Masukkan Nilai IPA");
        }
        else if (txtips.Text == "")
        {
            errorProvider1.Clear();
            errorProvider1.SetError(txtips, "Masukkan Nilai IPS");
        }
        else if (txtbind.Text == "")
        {
            errorProvider1.Clear();
            errorProvider1.SetError(txtbind, "Masukkan Nilai Bahasa Indonesia");
        }
        else if (txtbing.Text == "")
        {
            errorProvider1.Clear();
            errorProvider1.SetError(txtbing, "Masukkan Nilai Bahasa Inggris");
        }
        else
        {
          /* try
            {
                con.Open();
                MySqlCommand cmd = new MySqlCommand("INSERT INTO datanilaiujian(UserID,Matematika,IPA,IPS,BIND,BING) VALUES(@a,@b,@c,@d,@e,@f)", con);
                cmd.Parameters.AddWithValue("@a",txtuseridMUN.Text.Trim());
                cmd.Parameters.AddWithValue("@b",txtmat.Text.Trim());
                cmd.Parameters.AddWithValue("@c",txtipa.Text.Trim());
                cmd.Parameters.AddWithValue("@d",txtips.Text.Trim());
                cmd.Parameters.AddWithValue("@e",txtbind.Text.Trim());
                cmd.Parameters.AddWithValue("@f",txtbing.Text.Trim());
                cmd.ExecuteNonQuery();
                con.Close();
                updatestatusUN();
                hitungrata();
                refreshMUN();       
                showallgridview();
            }
            catch (Exception ex)
            {
                con.Close();
                RadMessageBox.Show(ex.Message.ToString());
            }*/
            float coba = float.Parse(txtmat.Text);
            RadMessageBox.Show(coba.ToString());
        }
    }

任何解决方案?

3 个答案:

答案 0 :(得分:2)

您似乎有格式问题;事实上,浮点(floatdoubledecimal)用两个类型的分隔符表示:十进制

123.456.789,12
   ^   ^   ^
   |   |   decimal separator
   |   |
   thousand separators      

解析时,分隔符只是 ingnored ,因此您可以两个不同的结果:

33.5  -> 335   // if '.' is a thousand separator (e.g. in Russian, ru-RU culture)
33.5  -> 33.5  // if '.' is a decimal separator  (e.g. in the US, en-US culture) 

这些分隔符依赖于文化(例如en-US使用,作为千位,而.使用ru-RU作为十进制当.处理相反的情况时方式:,千和CultureInfo.InvariantCulture十进制),这就是我建议使用float coba = float.Parse(txtmat.Text, CultureInfo.InvariantCulture); 的原因 解析时:

Page_Init

答案 1 :(得分:1)

这可能是您当前的文化和NumberDecimalSeparator的问题。

尝试使用InvariantCulture进行解析:

float coba = float.Parse(txtmat.Text, CultureInfo.InvariantCulture);

C# float.Parse String

可以找到一个非常类似的问题

答案 2 :(得分:1)

这可能是因为在您的语言环境中,dot不是小数点分隔符。

尝试将其设置为不变文化:

        float coba = float.Parse(txtmat.Text, CultureInfo.InvariantCulture);