es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de tipo con operaciones con fechas (paquete datetime)

Tengo este código:

import datetime

last_date = datetime.datetime(2021, 1, 15)
first_date = datetime.datetime(2021, 1, 1)

date_1 = last_date - first_date

print(date_1) # Esto imprime: 14 days, 00:00:00

r = 0.05

fa = 1 / (1 + r) ** (date_1 / 360)

fa

Recibo este error:

TypeError: unsupported operand type(s) for ** or pow(): 'float' and 'datetime.timedelta'

Estoy interesado en el número de días, no en las horas.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código está tratando de realizar una operación matemática que involucra un valor float y un valor datetime.timedelta, lo cual no es compatible con Python. El mensaje de error menciona específicamente el uso del operador de exponenciación (**), también conocido como el operador de potencia o el símbolo de la caret, que se utiliza para elevar un número a una cierta potencia.

    La línea problemática es:

    fa = 1/(1+r)**(date_1/360)
    

    La variable date_1 es un objeto datetime.timedelta que representa la diferencia entre last_date y first_date. El operador / se utiliza para dividir date_1 por el valor entero 360. Esta operación produce un valor float, que luego se utiliza como exponente en la operación de potencia que involucra a (1 + r).

    Para solucionar el error y obtener el resultado esperado, necesitamos convertir el objeto datetime.timedelta en un valor numérico que represente el número de días. Podemos hacer esto llamando al atributo days del objeto timedelta, que devuelve un valor entero que representa el número de días:

    days = date_1.days
    

    Luego, podemos realizar la operación de potencia utilizando days en lugar de date_1/360:

    fa = 1/(1+r)**(days/360)
    

    Esto producirá una salida que representa el factor de valor presente de un flujo de efectivo que ocurre 14 días después de la fecha de inicio, utilizando una tasa de descuento del 5% anual.

Comments are closed.