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

convert decimal from textbox to variable with 2 decimal point

本问题已经有最佳答案,请猛点这里访问。

我开发了WinForm应用程序,我需要这个问题的帮助。当我插入值为33.5的textbox时,我将文本框上的值保存到程序中的双变量,但在我的文本框转换为双变量后,变量中的值为335而不是33.5,这是我的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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());
        }
    }

有什么解决办法吗?


您似乎有格式问题,实际上,浮点(floatdoubledecimal用两种分隔符表示:千和小数:

1
2
3
4
5
123.456.789,12
   ^   ^   ^
   |   |   decimal separator
   |   |
   thousand separators

解析时,千个分隔符只是一个规范,因此您可以有两种不同的结果:

1
2
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的原因。分析时:

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

这可能是因为在您的区域设置中,点不是小数分隔符。

尝试将其设置为不变区域性:

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


这可能是当前区域性和数字小数分隔符的问题。

尝试使用不变区域性进行分析:

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

在C float.parse字符串中可以发现一个非常类似的问题。