Различные результаты для функций, генерирующих список чисел в десятичном виде - PullRequest
0 голосов
/ 30 января 2019

Для задачи: создать список чисел от 2 до 5,5 с step=0.5, данные результата должны быть десятичного типа.

Я написал две функции и мне интересно почему результатыразные (например, Десятичная ('4') и Десятичная ('4.0')).

Код написан на Python 3.5 .

Вотфункции:

def generate_decimals(begin=2.0, end=5.5, step=0.5):
    nums_list = list(arange(begin, end + step, step))
    return [Decimal(number) for number in nums_list]


def generate_decimals2(begin=2.0, end=5.5, step=0.5):
    decimals = []
    num = Decimal(begin)
    while num <= end:
        decimals.append(num)
        num += Decimal(step)
    return decimals

Результат для generate_decimals ():

[Decimal('2'), Decimal('2.5'), Decimal('3'), Decimal('3.5'), Decimal('4'), Decimal('4.5'), Decimal('5'), Decimal('5.5')]

Результат для generate_decimals2 ():

[Decimal('2'), Decimal('2.5'), Decimal('3.0'), Decimal('3.5'), Decimal('4.0'), Decimal('4.5'), Decimal('5.0'), Decimal('5.5')]

Является одним из этих результатов большесоответствующий чем другие ??

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вероятно, «правильный» код должен выглядеть примерно так (в «полном» десятичном формате):

def generate_decimals2(begin='2.0', end='5.5', step='0.5'):
    decimals = []
    num = Decimal(begin)
    while num <= Decimal(end):
        decimals.append(num)
        num += Decimal(step)
    return decimals
0 голосов
/ 30 января 2019

Результат неявно преобразуется во втором случае (от int до float) после добавления 0.5.

В первом случае каждое число преобразуется отдельно, если необходимо, например, 3 не нужно приводить к типу целых чисел.

Конечно, оба эти результата одинаково действительны.

...