Panoplia de redondeos

Escenarios de redondeo

Se retiran monedas de cambio

Monedas de uno y cinco pesos
Monedas de uno y cinco pesos

En Chile, el 1.º de noviembre de 2017, retiraron las monedas de 1 dólar y 5 dólares  (pesos chilenos) y comenzó a aplicarse la regla de redondeo: «A partir de hoy entró en vigencia el cese de emisión de las monedas de 1 dólar y 5 dólares y la obligación de aplicar la regla de redondeo a la cuenta final terminada entre 1 dólar y 9 dólares de los pagos que se realizan en efectivo, de acuerdo con la Ley N° 20.956. . . . La regla consiste en que las cuentas finales terminadas de 5 dólares hacia abajo deben ser redondeadas hacia la decena anterior, mientras que las cuentas finales iguales o superiores a 6 dólares deben ser redondeadas hacia la decena de arriba.»

Como el redondeo de los medios puntos ha de hacerse hacia abajo, necesitamos un esquema de cálculo como el de entero_mi(), además, combinarlo con un redondeo al múltiplo de \(10\) más cercano. El comportamiento se muestra en la siguiente tabla:$$\small {\begin{array}{c|c|c|c|} x & 0 & \dotsc & 5 & \dotsc & 10 & \dotsc & 15 & \dotsc & 20 \\ \hline \text{redondeo_Chile}(x) & 0 & \leftarrow & \leftarrow & \rightarrow & 10 & \leftarrow & \leftarrow & \rightarrow & 20 \\ \hline \end{array} }$$ Con todo ello, podemos escribir la función redondeo_Chile()

def redondeo_Chile(num):
    return 10 * math.ceil(num / 10 - 0.5)

Cómo pudo ganar \(\bf {4000\,€}\) con la conversión de pesetas y no lo hizo

El tipo fijo de conversión establecido el \(31\) de diciembre de \(1998\) fue de \(1\,€ = 166{,}386 \text{ ptas}\). La peseta no tenía valores fraccionarios, el euro se puede expresar hasta los céntimos de euro. Según las reglas de redondeo establecidas, la conversión de pesetas debía expresarse redondeada al céntimo de euro más cercano. Una peseta se convirtió en \(1 \text{ cen}\) (tras el redondeo de \(0{,}0060\,€\)), luego acudiendo un millón de veces a cambiar una peseta habríamos obtenido \(10\,000\,€\). Un millón de pesetas con una sola visita al banco se hubiera convertido en \(6010{,}12\,€\), casi \(4000\,€\) «perdidos».

def valor_euros(pesetas):
    pesetas_por_euro = 166.386  # 1 euro en pesetas
    return redondeo_mat(pesetas / pesetas_por_euro, 2)

# También puede calcularse así
# redondeo_mult(0.01, pesetas / pesetas_por_euro)

def valor_pesetas(euros):
    pesetas_por_euro = 166.386  # 1 euro en pesetas
    return redondeo_mat(euros * pesetas_por_euro)   

# También puede calcularse así
# redondeo_mult(1, euros * pesetas_por_euro)  

En la ley sobre introducción del euro en España se dan instrucciones para el redondeo: «Artículo 11. Redondeo. Uno. En los importes monetarios que se hayan de abonar o contabilizar, cuando se lleve a cabo una operación de redondeo después de una conversión a la unidad euro, deberán redondearse por exceso o por defecto al céntimo más próximo. Los importes monetarios que se hayan de abonar o contabilizar y se conviertan a la unidad monetaria peseta deberán redondearse por exceso o por defecto a la peseta más próxima. En caso de que al aplicar el tipo de conversión se obtenga una cantidad cuya última cifra sea exactamente la mitad de un céntimo o de una peseta, el redondeo se efectuará a la cifra superior.»

El redondeo del interés hipotecario

En el Portal Cliente Bancario del Banco de España se comenta la situación abusiva del redondeo al alza de las entidades bancarias en el cálculo del interés hipotecario: «A partir del 24 de noviembre de 2002, en los nuevos créditos y préstamos hipotecarios a tipo de interés variable, cuando se recoja el redondeo, este tiene que ser al intervalo más próximo, sin que se pueda sobrepasar el octavo de punto.» y se muestran dos ejemplos: 

Euríbor Diferencial Tipo de interés Redondeo
\(-0{,}191\) \(1{,}5\) \(1{,}309\) \(1{,}250\)
\(-0{,}179\) \(1{,}5\) \(1{,}321\) \(1{,}375\)

donde queda claro que se ha de aplicar el redondeo al tipo de interés (Euríbor + Diferencial). Algunas entidades aplicaron (y quizá sigan aplicando) el redondeo al índice Euríbor. Un cliente de una entidad publicaba un post en Rankia en el que decía: «Si la revisión fue en 12-5-2011 el ultimo euribor en BOE 4/5/2011 fue de 2,086. Me gustaría que alguien me explicara cómo se aplica el redondeo (no sé hacerlo) para ver como han llegado a ese resultado, puesto que sin redondeo es 2,086 + 0,65 = 2,736 pero lo que ellos aplican es 2,775.» Enseguida veremos cómo aplicaron el redondeo.

Para el cliente enojado con su caja de ahorros, un redondeo del interés al octavo de punto \((1/8 = 0{,}125)\) más cercano:

euribor, diferencial = 2.806, 0.65
interes = euribor + diferencial

# Aplicación correcta del redondeo
print(redondeo_mult(0.125, euribor + diferencial))
# Interés resultante: 2.75

# Aplicación incorrecta del redondeo
print(redondeo_mult(0.125, euribor) + diferencial)
# Interés resultante: 2.775

Al aplicar de manera incorrecta el redondeo, afectando solo al índice Euríbor,  le incrementaron el interés en casi un punto porcentual, ya que \(2{,}775 \approx 2{,}75 \cdot (1 + \color{red}{0{,}01})\), razón suficiente para estar enojado. Debería haberlo reclamado.

Reexpresión y redondeo de precios

Bancco Central de VenezuelaRecientemente (agosto de \(2018\)) en Venezuela se ha llevado a cabo una reexpresión de precios debido a la reconversión monetaria. La antigua moneda, el Bolívar (Bs), es la cienmilésima parte de la nueva moneda, el Bolívar Soberano (BsS) : \(1 BsS = 100\,000 Bs\). Se publicaron reglas de redondeo: «Artículo 3. [. . .] a) Cuando el tercer decimal de la cantidad reexpresada sea igual o superior a cinco (5), el segundo decimal se elevará en una unidad. b) Cuando el tercer decimal de la cantidad reexpresada sea inferior a cinco (5), el segundo decimal quedará igual. El citado redondeo se aplicará por una sola vez, con el objeto de que el precio o valor individual de los bienes y servicios, así como de otros importes monetarios reexpresados se lleven a dos (2) decimales. Con excepción de lo previsto en el artículo 4 de la presente Resolución, cuando por efecto de la división entre cien mil (100.000) resulte un número cuya parte entera sea igual a cero (0) y la parte decimal sea inferior a una (1) centésima, el precio unitario se redondeará a un (1) céntimo.»

Reexpresión y redondeo
Reexpresión y redondeo

Por tanto para reexpresar los precios actuales en BsS hay que dividirlos entre \(100\,000\) y redondearlos a las centésimas, con la excepción de los precios que no superen \(1000\) Bs que se convertirán a \(1\) céntimo de BsS.

 

def redondeo_precios_BsS(num):
    if num <= 1000: return 0.01
    num *= 10**(-3)  # -5 + 2 = -3
    return math.floor(num + 0.5) / 100    

def redondeo_sueldos_BsS(num):
    num *= 10**(-3)  
    return (math.floor(num) + sgn(math.floor(10 * num) % 10)) / 100

«Artículo 5. Los sueldos y salarios básicos, [. . .] En el caso que tales conceptos, por la división entre cien mil (100.000), resulten con un tercer decimal diferente a cero (0), se efectuará el ajuste, por una sola vez, elevando en una (1) unidad el segundo decimal.»

Precios rebajados

Estamos acostumbrados a ver en catálogos y escaparates precios que anuncian rebajas. ¿Por qué los precios rebajados tienen que acabar en \(9\)? Estos precios se perciben mucho menores que los precios de un céntimo más alto si el dígito más a la izquierda cambia a una unidad inferior (p.e. de \(3{,}00\) a \(2{,}99\)) pero no si el dígito a la izquierda permanece inalterado (p.e. de \(3{,}60\) a \(3{,}59\)) Es decir la percepción de mayor rebaja se tiene no solo terminando el precio en nueves sino reduciendo también la cifra anterior.

Invadidos por el 9
Invadidos por el 9
def precio_rebajado(num, dto=0):
    num *= 1 - dto
    return -sgn(num) * 0.01 + entero_i(num)

# Pruébalo con varios precios 10, 65, 120, 175, 230, 285
precios = range(10, 300, 55)
# descuento de 0%
print([(p, precio_rebajado(p)) for p in precios])
#(10, 9.99)
#(65, 64.99)
#(120, 119.99)
#(175, 174.99)
#(230, 229.99)
#(285, 284.99)

Deja una respuesta