将十进制从文本框转换为带有 2 个小数点的变量 [重复]

Posted

技术标签:

【中文标题】将十进制从文本框转换为带有 2 个小数点的变量 [重复]【英文标题】:convert decimal from textbox to variable with 2 decimal point [duplicate] 【发布时间】:2017-06-08 04:40:26 【问题描述】:

我开发了 winform 应用程序,我需要帮助解决这个问题。当我插入值为 33.5 的 textBoxt 时,我将 textBox 上的值保存到程序中的 double 变量,但在我的 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());
        
    

有什么办法吗?

【问题讨论】:

***.com/questions/1354924/… 【参考方案1】:

您似乎遇到了格式问题;事实上,浮点数(floatdoubledecimal)用两种种分隔符表示:十进制 个:

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

在解析时,个分隔符只是忽略,因此你可以有两种不同的结果:

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 以完全相反的方式处理它们:. 千位和@ 987654331@十进制),这就是为什么我建议使用CultureInfo.InvariantCulture 解析时:

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

【讨论】:

【参考方案2】:

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

尝试用 InvariantCulture 解析:

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

一个非常相似的问题可以在C# float.Parse String找到

【讨论】:

谢谢兄弟,为我工作【参考方案3】:

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

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

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

【讨论】:

以上是关于将十进制从文本框转换为带有 2 个小数点的变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

小数的二进制补码

asp.net 怎么让用户在文本框里填入的是数字和带有小数点? 正则也行!

如何将数值转化为二进制数?

Perl - 将数字转换为 2 个十进制

MFC 将文本框内容转为十六进制的字符串

python各数据类型及内置方式: