如何将字符串“1”转换为十进制?(C#)

时间:2018-03-07 13:04:53

标签: c# string type-conversion decimal

我有以下字符串

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,时,我不会收到错误。

2 个答案:

答案 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方法,它几乎就像它在锡上所说的那样。它将尝试解析一个值,返回一个布尔值来指示结果,如果成功则返回解析后的值。