在C#windows表单类中,我绑定了这样的文本框。
this.textMargin.DataBindings.Add(new Binding("Text", dt, "Margin", true, DataSourceUpdateMode.OnValidation, 0, "P"));
这样可以将文本框“textMargin”显示为百分比。但是,当我将文本框的值传递给我的更新语句时,即使我尝试使用Decimal.Parse,我也会收到字符串格式错误:
decimal testconvert = Decimal.Parse(this.textMargin.Text);
我想要传递的值是'100%',但它需要以1的形式提交回数据库。
这里有什么秘诀?
由于
答案 0 :(得分:4)
尝试
string textMargin = this.textMargin.Text.EndsWith("%") ? this.textMargin.Text.Replace("%","") : this.textMargin.Text;
decimal testconvert = Decimal.Parse(textMargin) / 100;
答案 1 :(得分:2)
这应该适合您,使用decimal.TryParse来避免错误,String.Replace删除您的%。
decimal.TryParse(this.textMargin.Text.Replace("%", ""), out testconvert);
testconvert = testconvert / 100;
答案 2 :(得分:1)
%
不是小数的有效部分,无法由Decimal.Parse
解析。
在解析之前,您需要将其从字符串中清除。
答案 3 :(得分:0)
正如您所看到的,Decimal.Parse
将不接受非数字值,但您可以使用下面的简单算法来删除非数字:
public static string RemoveNonDigits(string s)
{
string newS = "";
if (s.Length == 0) return newS;
for (int i = 0; i < s.Length; i++)
{
if (Char.IsDigit(s[i]) || s[i] == '.')
newS += s[i];
else if (!Char.IsDigit(s[i]))
{
newS += "";
}
return newS;
}
然后你可以打电话
Decimal percent = Decimal.Parse(RemoveNonDigits(textMargin.Text.ToString()));