Visual Basic.NET - Redondear monto decimal de una moneda

 
Vista:

Redondear monto decimal de una moneda

Publicado por Apatuka (2 intervenciones) el 17/02/2012 03:23:03
Buenas a todos, me gustaría saber como puedo hacer o que sugieren para que a la hora de hacer un pago a cuotas y redondee me salga exacto les doy el ejemplo.

Tengo un precio por ej 100 €, quiero dividirlo por 12 meses y me daría 8,33 €, luego el mismo lo multiplico nuevamente por 12 y me da como resultado 99,96 €, y redondeado me da 100, el problema está, que sugieren que pueda hacer para que pueda tomar las redondeadas bien sin que tenga una perdida de 0.04 € ?

Aquí un pedazo de mi código:

1
2
3
4
Dim price as Decimal = 100
    Dim pricemonth as Decimal = Math.round((price/12),2) ' 8,33
    Console.Writeline(pricemonth*12) ' 99,96
    Console.Writeline(Math.round((pricemonth*12),2)) ' 100


Me gustaría sugerencias asi para la hora de cobrar una mensualidad en el programa, me ponga bien sin tener esa perdida de 0.04 € a la hora de redondear...

Desde ya muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Redondear monto decimal de una moneda

Publicado por Damian Garcia (824 intervenciones) el 17/02/2012 13:52:08
La verdad te estas contradiciendo, dices que quieres redondear un número y lo estas haciendo como se ve en tu código, pero a la vez dices que pierdes unos decimales. Y si de eso se trata al redondear que te ponga un número redondo. Así que no se que necesitas, si no quieres perder esos decimales no lo redondees y listo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Redondear monto decimal de una moneda

Publicado por apacheco (98 intervenciones) el 17/02/2012 14:58:06
Es el proble tipico de los pagos aplazados.

Yo suelo generar un cuadro de pagos en el cual (en el ejemplo que indicas) habria 11 pagos de 8,34 y un pago final de 8,26.

O bien al reves, 11 de 8,33 y un ultimo pago de 8,37
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redondear monto decimal de una moneda

Publicado por Apatuka (2 intervenciones) el 17/02/2012 15:25:56
Gracias, tienes un ejemplo en Vb.Net ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 29
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Redondear monto decimal de una moneda

Publicado por apacheco (98 intervenciones) el 19/02/2012 12:54:30
Supongamos :

Importe_a_Repartir = 1256,75
Numero_Pagos = 12

Dim Pago_Mensual as Double
Dim Pago_Final as Double

Pago_Mensual = INT((Importe_a_Repartir / Numero_Pagos) * 100 + 0.5) / 100

en el ejemplo : Pago_Mensual = 104,73

con esto garantizo que a partir del segundo decimal todos los restantes son ceros.

Pago_Final = Importe_a_Repartir - (Pago_Mensual * 11) ----- No son obligatorios los paréntesis

en el ejemplo : PagoFinal = 104,72

el proceso seria:

Importe_a_Cobrar = IIF(Pago_a_Cobrar < Numero_Pagos, Pago_Mensual, Pago_Final)

donde Pago_a_Cobrar es una variable que nos indica el número de pago que se reliza e Importe_a_Cobrar seria el importe por el que se generaría la factura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redondear monto decimal de una moneda

Publicado por ros (21 intervenciones) el 17/02/2012 17:21:13
Creo que deberías de hacer unas cuantas pruebas con los tipos de campo numérico.

Si quieres precisión, el tipo numérico “Double” es tu amigo.

Otra cosa es una buena técnica calcular los plazos y al primero o al ultimo añadirle el resto o las diferencias del redondeo.

100/3 =33
Plazo1=33
Plazo 2 =33
Plazo 3=33 + 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar