Estoy tratando de crear una aplicación básica de cajero bancario donde el saldo SIEMPRE comienza en $ 1000 y puede depositar y retirar cantidades. Actualmente, dado que el saldo siempre comenzará en $ 1000, tengo

public Form1()
    {
        InitializeComponent();

        lblBalance.Text = "1000.00";
        
    }

En el inicializador, ya que siempre comenzará en 1000, y luego tengo

private void btnWithdraw_Click(object sender, EventArgs e)
       
        //Withdraw button, initializing variables to make withdrawal calculation based on current balance and what input is in withdrawal text box.

    {
        decimal withdraw = Decimal.Parse(txtWithdraw.Text);
        decimal INaccountBalance = Decimal.Parse(lblBalance.Text);
        decimal FINaccountBalance = (INaccountBalance - withdraw);

        lblBalance.Text = FINaccountBalance.ToString("c");
        
        
    }

En el botón de retirar haga clic, que es un cálculo que simplemente actualiza el saldo en función del saldo actual en la etiqueta restado por cualquier entrada que se ponga en el cuadro de texto para el retiro, sin embargo, mi programa se bloquea si trato de retirar más de dos veces . Entonces puedo poner 1 valor para el retiro y hará el cálculo y actualizará el saldo, pero si retiro nuevamente, simplemente bloqueará el programa y me dará un 'La cadena de entrada no estaba en el formato correcto'. Error.

1
geronim0 3 oct. 2021 a las 21:28

2 respuestas

La mejor respuesta

Parece que no puede aplicar el formato Parse moneda :

  lblBalance.Text = FINaccountBalance.ToString("c");

Que vuelve a lblBalance.Text algo como

  123.00$

(tenga en cuenta el signo de moneda $) y esta cadena no se puede volver a Parse d (ha lanzado FormatException) a decimal en

  decimal INaccountBalance = Decimal.Parse(lblBalance.Text);

Puede intentar cambiar el formato, por ejemplo, a F2; deje que el saldo sea con dos dígitos después del punto decimal.

  lblBalance.Text = FINaccountBalance.ToString("F2");

Ahora tendrá una representación decimal sin signos de moneda

  123.00

Que se puede Parse d en el próximo retiro

1
Dmitry Bychenko 3 oct. 2021 a las 18:43

Puede utilizar una sobrecarga de Parse que acepte esto

decimal INaccountBalance = Decimal.Parse(lblBalance.Text, NumberStyles.Any, null);

O

decimal INaccountBalance = Decimal.Parse(lblBalance.Text, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, null);
0
Charlieface 3 oct. 2021 a las 18:46