从文本框字符串转换为十进制

时间:2015-01-07 13:13:52

标签: c#

我在将字符串转换为十进制时遇到问题。

decimal num = convert.todecimal(textbox1.text);

例如:如果文本框中的值为2.50,则转换后我得到num = 250。 "。"从字符串中删除。我想得到它在文本框中写的价值。

请提供任何解决方案

4 个答案:

答案 0 :(得分:1)

这是Decimal.TryParse的小提琴:

https://dotnetfiddle.net/lDbfei

using System;
using System.Net;

public class Program
{
    public static void Main()
    {
        string myval = "put a number / your value here";
        decimal d = 0;
        var result = decimal.TryParse(myval, out d);
        Console.WriteLine(result);  
        Console.WriteLine(d);
    }
}

答案 1 :(得分:1)

试试这个:

decimal temp;
decimal.TryParse(textBox1.Text, out temp);

另一个例子:

 if(decimal.TryParse(textBox1.Text, out temp))
        {
            if(textBox1.Text.Contains(","))
            {
               textBox1.Text =  textBox1.Text.Replace(',', '.');
            }
        }

答案 2 :(得分:1)

您可以使用静态方法Decimal.TryParse

decimal myDec;
if (!Decimal.TryParse(mytextboxesContent, out myDec)) {
    // do whatever you want to if the content is not valid;
}

此方法的返回值还使您有机会对无效输入做出反应(例如“abc”或“1,3,4”)。

答案 3 :(得分:0)

当您尝试转换来自用户的输入时,您不应盲目接受传递给您的所有内容,否则您将面临在许多例外情况下发生的风险。

这是TryParse系列方法的许多版本背后的设计决策。 检查您的输入是否可以使用正确的数据类型进行转换,如果不可能,请使用返回值进行建议,不要抛出异常。如果转换是可能的,则使用转换结果初始化传出的变量

然后,存在本地化问题。在某些文化中,逗号表示数字小数部分的开头,而其他文化则喜欢点符号。 尝试使用CurrentCulture进行转换并尝试InvariantCulture

失败时,可以解决此问题
string dec = "2.5"; // Not good for cultures that likes a comma as decimal symbol
decimal d;
if(!decimal.TryParse(dec, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out d))
{
    MessageBox.Show("Not a valid number in current culture");
    if(!decimal.TryParse(dec, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
        MessageBox.Show("Type a valid number please!");
}

MessageBox.Show("Valid number:" + d.ToString());

当然,如果您确定不可能为小数点分隔符输入无效符号,那么只有使用CultureInfo.InvariantCulture本地化时才能使用一个符号。 (但要注意一些简单的用户操作,例如从计算器复制/粘贴到文本框)。