Gambadas: El Redondeo
Leyendo hoy en el boletín de CAMPUS MVP la gambada del mes de Mayo, he recordado que tengo en mi HD portátil una que tenía vuelto el juicio a un cliente en el que estuve trabajando, ya que al cerrar la caja del mes, no cuadraba la facturación de las cuentas de ventas al contado (Unos eurillos) en las delegaciones donde estaba implantada la nueva aplicación y que a final de mes se envía a Central y se comprueba con una rutina de Oracle.
Me pidieron ayuda para solventar el problema y depurando la rutina de facturación me encontré esto:
1: /// <summary>
2: /// Trunca el número de decimales de un número al
3: /// indicado en el parámetro iNumDecimales
4: /// </summary>
5: /// <param name="dNumero">Numero a truncar</param>
6: /// <param name="iNumDecimales">Nº de decimales</param>
7: /// <returns></returns>
8: public double Redondear(double dNumero, int iNumDecimales)
9: { 10: try
11: { 12: string sTodo, sParteEntera, sParteDecimal;
13: string[] sNumero;
14: sTodo = dNumero.ToString();
15:
16: /* Si el número tiene parte decimal.*/
17: if (sTodo.IndexOf(".") != -1) 18: { 19: sNumero = sTodo.Split('.'); 20:
21: sParteEntera = sNumero[0];
22: sParteDecimal = sNumero[1];
23:
24: if (sParteDecimal.Length > iNumDecimales)
25: sParteDecimal = sParteDecimal.Remove(iNumDecimales,
26: sParteDecimal.Length - iNumDecimales);
27:
28: sTodo = sParteEntera + "." + sParteDecimal;
29: }
30: dNumero = double.Parse(sTodo);
31: return dNumero;
32: }
33: catch(Exception _ex)
34: { 35: throw new ...(_ex,"Factura","Redondear");
36: }
37: }
La solución fue sencilla:
1: /// <summary>
2: /// Trunca el número de decimales de un número al
3: /// indicado en el parámetro iNumDecimales
4: /// </summary>
5: /// <param name="dNumero">Numero a truncar</param>
6: /// <param name="iNumDecimales">Nº de decimales</param>
7: /// <returns></returns>
8: public decimal Redondear(decimal dNumero, int iNumDecimales)
9: { 10: return Math.Round(dNumero, iNumDecimales);
11: }
Salu2