我有以下字符串
string str = "1,"
如何将其转换为十进制1.00
?我在这段代码中使用它:
EditText quantityEditText = FindViewById<EditText>(Resource.Id.quantityEditText);
quantityEditText.SetFilters(new IInputFilter[] { new DecimalFilter(3) });
quantityEditText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => {
//calculate total price and set it to totalPriceTextView
decimal articlePriceAfterDiscount = Convert.ToDecimal(articlePriceAfterDiscountTextView.Text);
decimal articleQuantity = Convert.ToDecimal(e.Text.ToString());
decimal totalPrice = Math.Round(articlePriceAfterDiscount * articleQuantity,2);
totalPriceTextView.Text = totalPrice.ToString();
};
因此,在输入1,
时,我不会收到错误。
答案 0 :(得分:2)
@juharr在评论中提供的信息:
我很惊讶地发现
Android.Text.TextChangedEventArgs.Text
实际上是IEnumerabl<char>
而不是string
带我去阅读documentation of the Android.Text.TextChangedEventArgs Class
它清楚地显示属性Text具有以下类型:
public IEnumerable<char> Text { get; }
所以我建议以下解决方案。它使用了这个不错的string constructor overload
decimal articleQuantity = Convert.ToDecimal(new string(e.Text.ToArray()));
答案 1 :(得分:1)
一个非常基本的例子(使用C#7语法):
using System;
public class Program
{
public static void Main()
{
string toParse = "1";
if (Decimal.TryParse(toParse, out var parsed)) {
Console.WriteLine("Parsed: " + parsed.ToString());
} else {
Console.WriteLine("Nope");
}
}
}
使用pre-C#7语法的相同示例:
using System;
public class Program
{
public static void Main()
{
string toParse = "1";
decimal parsed;
if (Decimal.TryParse(toParse, out parsed)) {
Console.WriteLine("Parsed: " + parsed.ToString());
} else {
Console.WriteLine("Nope");
}
}
}
两者之间的唯一区别是C#7允许我们在TryParse
内联实例化out参数,而不是在方法调用之外。
像Decimal,int,long,bool等大多数类型的构造都有一个.TryParse
方法,它几乎就像它在锡上所说的那样。它将尝试解析一个值,返回一个布尔值来指示结果,如果成功则返回解析后的值。