Я вычитаю время и конвертирую дату-время в строку, используя функцию .get_seconds().

diff = end_date - start_date
seconds = diff.total_seconds()
months = seconds / 2628000
years = months / 12

Когда я печатаю years, число выходит на 0.830136986301

Я искал вариант форматирования в Python

format(years, '.0f')

Но это округляет до 1. В любом случае я могу просто "вырезать" десятичную дробь без ее округления?

2
Morgan Allen 18 Дек 2015 в 23:43

5 ответов

Лучший ответ

Это сработало:

format(math.floor(number), '.0f')
0
Kevin Reid 18 Дек 2015 в 23:17

Это решение несколько использует округление, но вы можете сказать:

years = math.floor(months / 12)

Еще лучше, однако, вы можете усечь значение, сказав:

years = math.trunc(months / 12)

Лично я предпочитаю усечение над полом, потому что усечение и пол обрабатывают отрицательные значения по-разному. Однако в вашем случае, предполагая, что значение всегда положительное, оба должны быть подходящими решениями, которые дают одинаковый результат. Кроме того, они оба используют модуль math, поэтому вам необходимо включить import math в начало вашего скрипта.

1
Spencer D 18 Дек 2015 в 21:24

То, что вам нужно, называется целочисленным делением, которое выполняется с "//".

#And then 
years // 12 # Will give you integer without the decimals.
1
chepner 18 Дек 2015 в 21:22

Если ваши цифры могут быть отрицательными, остерегайтесь функции пола. Вот сравнение различных функций преобразования с плавающей точкой в int

list(map(math.floor, (0.734, -0.734, 0.314, -0.314)))
[0, -1, 0, -1]

list(map(math.ceil, (0.734, -0.734, 0.314, -0.314)))
[1, 0, 1, 0]

list(map(int, (0.734, -0.734, 0.314, -0.314)))
[0, 0, 0, 0]

list(map(round, (0.734, -0.734, 0.314, -0.314)))
[1, -1, 0, 0]

list(map(math.trunc, (0.734, -0.734, 0.314, -0.314)))
[0, 0, 0, 0]
1
karakfa 18 Дек 2015 в 21:20

Можно ли как-нибудь просто "вырезать" десятичную дробь без ее округления?

Это по определению невозможно , поскольку «вырезание десятичной дроби» подразумевает округление вниз. Так что нет, вы не можете. Вы можете, однако, манипулировать способом округления числа!

Из того, что я понимаю по вашему вопросу, вы можете привести к int, чтобы получить желаемый результат (это похоже на округление вниз), например так:

>>>print(int(years))
0
1
N. Wouda 18 Дек 2015 в 20:48