change decimal place in textbox using numericUpDown

余生颓废 提交于 2019-12-12 01:24:26

问题


Im using Visual Studio 2010, windows form (c#).

I need change decimals place of value in textbox using numericUpDown1.

example:

I tryed this code:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {

      //  tbxConvertito.Text = (decimal.Parse(tbxConvertito.Text) * 10m).ToString();

        if (numericUpDown1.Value == 0)
        {
            int decimalPlace = 0;
           // Decimal xDecimal = decimal.Parse(tbxConvertito.text);

            decimal xDecimal = decimal.Parse(tbxConvertito.Text);
            tbxConvertito.Text = (Math.Round(xDecimal, decimalPlace)).ToString();
        }

        if (numericUpDown1.Value == 1)
        {
            int decimalPlace = 1;
            // Decimal xDecimal = decimal.Parse(tbxConvertito.text);

            decimal xDecimal = decimal.Parse(tbxConvertito.Text);
            tbxConvertito.Text = (Math.Round(xDecimal, decimalPlace)).ToString();
        }

    }

but not work. How can I solve this, please?


回答1:


You should create field with decimal value, to keep original value.

If you do that:

int decimalPlace = 1;
decimal xDecimal = decimal.Parse(tbxConvertito.Text);
tbxConvertito.Text = (Math.Round(xDecimal, decimalPlace)).ToString();

You lose original value of your decimal variable.

Try this:

public partial class Form1 : Form
{
        public decimal myDecimal = 3755.25012345M;

        public Form1()
        {
            InitializeComponent();

            tbxConvertito.Text = myDecimal.ToString();

            numericUpDown1_ValueChanged(this, EventArgs.Empty);
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {          
            int decimalPlace = (int)numericUpDown1.Value;
            tbxConvertito.Text = Decimal.Round(myDecimal, decimalPlace).ToString();
        }
}

Solution without use Round method:

  public partial class Form1 : Form
    {
        public decimal myDecimal = 3755.25012345M;

        public Form1()
        {
            InitializeComponent();

            tbxConvertito.Text = myDecimal.ToString();

            numericUpDown1_ValueChanged(this, EventArgs.Empty);
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {          
            int decimalPlace = (int)numericUpDown1.Value;

            string[] numbers = myDecimal.ToString().Split(new char[] { '.', ',' });

            string tmp = string.Empty;

            if (decimalPlace <= numbers[1].Length)
            {
                tmp = "," + numbers[1].Substring(0, decimalPlace);

                if (tmp.EndsWith(","))
                    tmp = string.Empty;
            }
            else
                tmp = "," + numbers[1];

            tbxConvertito.Text = numbers[0] + tmp;
        }
    }



回答2:


You can achieve this using String operations. Try this one

decimal xDecimal = decimal.Parse(tbxConvertito.Text);
string str = xDecimal.ToString();
if (!str.Contains(","))
            decimalPlace--;
tbxConvertito.Text = str.Replace(",", "").Insert((str.Length-1) - decimalPlace,",");

And use it like this in your code

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{

  //  tbxConvertito.Text = (decimal.Parse(tbxConvertito.Text) * 10m).ToString();

    if (numericUpDown1.Value == 0)
    {
        int decimalPlace = 0;
       // Decimal xDecimal = decimal.Parse(tbxConvertito.text);

        decimal xDecimal = decimal.Parse(tbxConvertito.Text);
        string str = xDecimal.ToString();
        if (!str.Contains(","))
            decimalPlace--;
        tbxConvertito.Text = str.Replace(",", "").Insert((str.Length-1) - decimalPlace,",");
    }

    if (numericUpDown1.Value == 1)
    {
        int decimalPlace = 1;
        // Decimal xDecimal = decimal.Parse(tbxConvertito.text);

        decimal xDecimal = decimal.Parse(tbxConvertito.Text);
        string str = xDecimal.ToString();
        if (!str.Contains(","))
            decimalPlace--;
        tbxConvertito.Text = str.Replace(",", "").Insert((str.Length-1) - decimalPlace,",");
    }

}


来源:https://stackoverflow.com/questions/14414138/change-decimal-place-in-textbox-using-numericupdown

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!