我在将字符串转换为十进制时遇到问题。
decimal num = convert.todecimal(textbox1.text);
例如:如果文本框中的值为2.50,则转换后我得到num = 250。 "。"从字符串中删除。我想得到它在文本框中写的价值。
请提供任何解决方案
答案 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本地化时才能使用一个符号。 (但要注意一些简单的用户操作,例如从计算器复制/粘贴到文本框)。