Principales respuestas
Amortizacion de prestamos en C#

Pregunta
-
Saludos,
Quisiera me ayudaran con el siguiente ejercicio.
Estoy creando una aplicacion en C# Windows Form para guardar los prestamos que realizo a clientes y quisiera poder crear una tabla de amortizacion del prestamo como se hace en excel. Ejemplo:
Prestamo: 10,000
Plazo(Meses): 3
Interes(Mensual): 10%
Con estos datos me gustaria generar la tabla indicando no solo el valor de la cuota del prestamo si no mostrar el detalle de la cuota en datagrid por ejemplo:
Valor de cuota mensual: 4,021.15
Cuota # Capital Interes Pendiente
1 3,021.15 1,000 6,9788.85
2 3,323.29 697.89 3,655.59
3 3,655.59 365.56 0
Quisiera generar esto en C# windows Form, Gracias.
- Editado ing. John Vargas viernes, 16 de marzo de 2018 11:48
Respuestas
-
Te paso una clase que hice para calcular planes de pagos para viviendas. Todos los cálculos se realizan en la clase Cuota, la cual tiene la propiedades: Nro, Valor, Amortización, Intereses, TotalAmortizado y Saldo. Luego puedes obtener una lista de cuotas con un bucle.
public class Cuota { #region Cosntructores public Cuota(double monto, int mesesPlazo, double taza) { this.Nro = 1; this.valor = CalcularCuota(monto, mesesPlazo, taza); this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza); this.amortizacion = totalAmortizado; this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza); } public Cuota(int nro, double monto, int mesesPlazo, double taza) { this.Nro = nro; this.valor = CalcularCuota(monto, mesesPlazo, taza); this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza); this.amortizacion = totalAmortizado; this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza); } public Cuota(int nro, double monto, int mesesPlazo, int periodoActual, double taza) { this.Nro = nro; this.valor = CalcularCuota(monto, mesesPlazo, taza); this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, periodoActual, taza); this.amortizacion = CalcularAmortizacion(monto, mesesPlazo, periodoActual, taza); this.saldo = CalcularSaldo(monto, mesesPlazo, periodoActual, taza); } #endregion Cosntructores #region Propiedades public int Nro { get; set; } private double valor; public double Valor { get { return valor; } } private double amortizacion; public double Amortizacion { get { return amortizacion; } } public double Interes { get { return valor - amortizacion; } } private double totalAmortizado; public double TotalAmortizado { get { return totalAmortizado; } } private double saldo; public double Saldo { get { return saldo; } } #endregion Propiedades #region Metodos Privados private double CalcularCuota(double monto, int mesesPlazo, double taza) { /***** FORMULA DE CALCULO * PMT = -RATE * ( FV + PV * Math.pow(1+RATE,NPER)) / ((Math.pow(1+RATE,NPER)-1)); */ double t = taza / 1200; double b = Math.Pow((1 + t), mesesPlazo); return t * monto * b / (b - 1); } private double CalcularAmortizacion(double monto, int mesesPlazo, int periodo, double taza) { double totAmortAnterior=0; if (periodo > 1) totAmortAnterior = CalcularTotalAmortizado(monto, mesesPlazo, periodo - 1, taza); return TotalAmortizado - totAmortAnterior; } private double CalcularTotalAmortizado(double monto, int n, int p, double taza) { double t = taza / 1200; double b = Math.Pow((1 + t), n); double c = Math.Pow((1 + t), p); return monto * ((c - 1) / (b - 1)); } private double CalcularSaldo(double monto, int mesesPlazo, int periodo, double taza) { double t = taza / 1200; double b = Math.Pow((1 + t), mesesPlazo); double c = Math.Pow((1 + t), periodo); return monto * (1-((c - 1) / (b - 1))); } #endregion Metodos Privados }
Esta función te devolverá una la lista de cuotas correspondientes a los parámetros monto, periodos y taza.
private List<Cuota> ListaCuotas(double monto, int periodos, double taza) { List<Cuota> cuotas = new List<Cuota>(); Cuota c; for (int i = 1; i <= periodos; i++) { c = new Cuota(i, monto, periodos, i, taza); } return cuotas; }
- Marcado como respuesta ing. John Vargas viernes, 23 de marzo de 2018 13:38
-
para mostrar en una grilla, (asumo que ya tenes la clase Cuota y la función ListaCuota que te mostré mas arriba) en el evento click de un boton para calcular las cuotas escribís este código;
private void btnCalcularCuota_Click(object sender, EventArgs e) { double m = double.Parse(txtMonto.Text); //el monto de la deuda int p = int.Parse(txtPeriodos.Text); //La cantidad de meses o cuotas double t = double.Parse(txtTaza.Text); //La taza de interes List<Cuota> cuotas = ListaCuotas(m, p, t); grCuotas.DataSource = null; grCuotas.DataSource = cuotas; }
- Marcado como respuesta ing. John Vargas viernes, 23 de marzo de 2018 13:38
-
Ya encontré el error, faltó agregar las cuotas creadas a la lista cuotas. Aquí está:
private List<Cuota> ListaCuotas(double monto, int periodos, double taza) { List<Cuota> cuotas = new List<Cuota>(); Cuota c; for (int i = 1; i <= periodos; i++) { c = new Cuota(i, monto, periodos, i, taza); cuotas.Add(c); } return cuotas; } }
- Editado AntiWork viernes, 23 de marzo de 2018 3:57
- Marcado como respuesta ing. John Vargas viernes, 23 de marzo de 2018 13:37
Todas las respuestas
-
Hola ing. John Vargas,
En ralacion a tu consulta te comento que lo que debes de hacer es manipular las filas y columnas para que muestren los resultados que deseas, te comparto un enlace donde se muestra mas a detalle como manipular los datagridview, de cualquier forma quedo atento a tus comentarios.
Saludos cordiales, gracias por usar los foros de MSDN
Tonatiuh Abrego
_____
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.
Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
- Marcado como respuesta Pablo RubioModerator domingo, 18 de marzo de 2018 15:41
- Desmarcado como respuesta webJoseModerator lunes, 19 de marzo de 2018 17:16
-
He visto el link que enviaste, perdon por la ignorancia pero soy nuevo en la programacion.
miqui quilmes, si tengo interes en los comentarios de las personas que me puedan ayudar.
Gracias.
-
Una forma de realizarlo en el DataGgridView seria crear un DataTable y mediante un bucle For ir calculando y añadiendo los resultados en las filas del DataTable, la cual asignaras al DataSourse del DataGridView.
double prestamo = 10000; double plazo = 3; double interesporcentaje = 10; double saldo = prestamo; double interes = 0; double cuotamensual = 4021.15; double capital = 0; DataTable dt = new DataTable(); dt.Columns.Add("NroCuota", typeof(int)); dt.Columns.Add("Capital", typeof(double)); dt.Columns.Add("Interes", typeof(double)); dt.Columns.Add("cuotaMensual", typeof(double)); dt.Columns.Add("Pendiente", typeof(double)); for (int i = 1; i <= plazo; i++) { interes = (saldo * interesporcentaje)/100; capital = cuotamensual - interes; saldo = saldo - capital; dt.Rows.Add(i, capital, interes, cuotamensual, saldo); } dataGridView3.DataSource = dt;
Y el resultado seria este
Obs: Los cálculos son de ejemplo no sabría decirte si son correctos.
Espero te sirva de ayuda.
Saludos.
- Editado osrol lunes, 19 de marzo de 2018 14:17
- Propuesto como respuesta Tonatiuh AbregoModerator martes, 20 de marzo de 2018 16:23
-
Te paso una clase que hice para calcular planes de pagos para viviendas. Todos los cálculos se realizan en la clase Cuota, la cual tiene la propiedades: Nro, Valor, Amortización, Intereses, TotalAmortizado y Saldo. Luego puedes obtener una lista de cuotas con un bucle.
public class Cuota { #region Cosntructores public Cuota(double monto, int mesesPlazo, double taza) { this.Nro = 1; this.valor = CalcularCuota(monto, mesesPlazo, taza); this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza); this.amortizacion = totalAmortizado; this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza); } public Cuota(int nro, double monto, int mesesPlazo, double taza) { this.Nro = nro; this.valor = CalcularCuota(monto, mesesPlazo, taza); this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, 1, taza); this.amortizacion = totalAmortizado; this.saldo = CalcularSaldo(monto, mesesPlazo, 1, taza); } public Cuota(int nro, double monto, int mesesPlazo, int periodoActual, double taza) { this.Nro = nro; this.valor = CalcularCuota(monto, mesesPlazo, taza); this.totalAmortizado = CalcularTotalAmortizado(monto, mesesPlazo, periodoActual, taza); this.amortizacion = CalcularAmortizacion(monto, mesesPlazo, periodoActual, taza); this.saldo = CalcularSaldo(monto, mesesPlazo, periodoActual, taza); } #endregion Cosntructores #region Propiedades public int Nro { get; set; } private double valor; public double Valor { get { return valor; } } private double amortizacion; public double Amortizacion { get { return amortizacion; } } public double Interes { get { return valor - amortizacion; } } private double totalAmortizado; public double TotalAmortizado { get { return totalAmortizado; } } private double saldo; public double Saldo { get { return saldo; } } #endregion Propiedades #region Metodos Privados private double CalcularCuota(double monto, int mesesPlazo, double taza) { /***** FORMULA DE CALCULO * PMT = -RATE * ( FV + PV * Math.pow(1+RATE,NPER)) / ((Math.pow(1+RATE,NPER)-1)); */ double t = taza / 1200; double b = Math.Pow((1 + t), mesesPlazo); return t * monto * b / (b - 1); } private double CalcularAmortizacion(double monto, int mesesPlazo, int periodo, double taza) { double totAmortAnterior=0; if (periodo > 1) totAmortAnterior = CalcularTotalAmortizado(monto, mesesPlazo, periodo - 1, taza); return TotalAmortizado - totAmortAnterior; } private double CalcularTotalAmortizado(double monto, int n, int p, double taza) { double t = taza / 1200; double b = Math.Pow((1 + t), n); double c = Math.Pow((1 + t), p); return monto * ((c - 1) / (b - 1)); } private double CalcularSaldo(double monto, int mesesPlazo, int periodo, double taza) { double t = taza / 1200; double b = Math.Pow((1 + t), mesesPlazo); double c = Math.Pow((1 + t), periodo); return monto * (1-((c - 1) / (b - 1))); } #endregion Metodos Privados }
Esta función te devolverá una la lista de cuotas correspondientes a los parámetros monto, periodos y taza.
private List<Cuota> ListaCuotas(double monto, int periodos, double taza) { List<Cuota> cuotas = new List<Cuota>(); Cuota c; for (int i = 1; i <= periodos; i++) { c = new Cuota(i, monto, periodos, i, taza); } return cuotas; }
- Marcado como respuesta ing. John Vargas viernes, 23 de marzo de 2018 13:38
-
Te pido José que elimines esta respuesta. Es por tu causa que yo mismo no puedo eliminarla.
De todas formas, el autor del hilo no ha demostrado interés en la respuesta.
Jose R. MCP
Code Samples -
Hola miqui Quilmes,
Espero estés teniendo un excelente día.
He leído lo sucedido en esta conversación y te solicitamos de favor evitar el lenguaje altisonante, te recuerdo que ya ha habido varios temas con el Moderador Pablo Rubio, por favor déjanos saber tus comentarios para poder ponernos en contexto en este tema.
Recibe un cordial saludo.
Gracias por usar los foros de MSDN.
Juan
_____Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.
Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
-
Hola hermano,
Gracias por todas sus respuestas de antemano,
Quisiera saber como hago para mostrar esta informacion en un grid.
Gracias tambien a osrol, lo hice como indicas y funciona
- Editado ing. John Vargas martes, 20 de marzo de 2018 17:32
-
para mostrar en una grilla, (asumo que ya tenes la clase Cuota y la función ListaCuota que te mostré mas arriba) en el evento click de un boton para calcular las cuotas escribís este código;
private void btnCalcularCuota_Click(object sender, EventArgs e) { double m = double.Parse(txtMonto.Text); //el monto de la deuda int p = int.Parse(txtPeriodos.Text); //La cantidad de meses o cuotas double t = double.Parse(txtTaza.Text); //La taza de interes List<Cuota> cuotas = ListaCuotas(m, p, t); grCuotas.DataSource = null; grCuotas.DataSource = cuotas; }
- Marcado como respuesta ing. John Vargas viernes, 23 de marzo de 2018 13:38
-
-
En el ultimo codigo que te pasé poné un punto de interrupción donde dice grCuotas.DataSource=null; y fijate cuantos elementos tiene la variable "cuotas".
Tené en cuenta que txtMonto, txtPeriodos y txtTaza son cajas de textos del form en el que estás haciendo el calculo y tenes que ponerle los datos que corresponda. Controlá también el tema del separador decimal.
-
Ya encontré el error, faltó agregar las cuotas creadas a la lista cuotas. Aquí está:
private List<Cuota> ListaCuotas(double monto, int periodos, double taza) { List<Cuota> cuotas = new List<Cuota>(); Cuota c; for (int i = 1; i <= periodos; i++) { c = new Cuota(i, monto, periodos, i, taza); cuotas.Add(c); } return cuotas; } }
- Editado AntiWork viernes, 23 de marzo de 2018 3:57
- Marcado como respuesta ing. John Vargas viernes, 23 de marzo de 2018 13:37
-
-