При а = 1, b = -1, c = -2 выводится -1.000000 и 2.000000. Как убрать ненужные ноли после запятой, не нарушая правильности ответов?

При а = 1, b = -1, c = -2 выводится -1.000000 и 2.000000.

Как убрать ненужные ноли после запятой, не нарушая правильности ответов?

    import math
    a = float(input())
    b = float(input())
    c = float(input())
    D = b ** 2 - 4 * a * c
    if D > 0:
        x1 = (-b + math.sqrt(D)) / (2 * a)
        x2 = (-b - math.sqrt(D)) / (2 * a)
        if x1 > x2:
            print(('{0:.6f}'.format(x2)), ('{0:.6f}'.format(x1)), end='')
        elif x1 < x2:
            print(('{0:.6f}'.format(x1)), ('{0:.6f}'.format(x2)), end='')
    elif D == 0:
        x1 = -b / (2 * a)
        if x1 % math.floor(x1) == 0:
            print(int(x1))
    elif D < 0:
        print('')

Ответы (2 шт):

Автор решения: Zhihar

используйте округление до 6 знака:

round(x, 6)

чем просто вывод с точностью в 6 знака... всегда

{0:.6f}'.format(x1)

код:

D = b ** 2 - 4 * a * c
if D > 0:
    x1 = (-b + math.sqrt(D)) / (2 * a)
    x2 = (-b - math.sqrt(D)) / (2 * a)
    if x1 > x2:
        print(round(x2, 6), round(x1, 6), end='')
    elif x1 < x2:
        print(round(x1, 6), round(x2, 6), end='')
elif D == 0:
    x1 = -b / (2 * a)
    if x1 % math.floor(x1) == 0:
        print(int(x1))
elif D < 0:
    print('')

P.S.

кстати гораздо проще вместо

if x1 > x2:
    print(round(x2, 6), round(x1, 6), end='')
elif x1 < x2:
    print(round(x1, 6), round(x2, 6), end='')

выводить так:

print(round(min(x1, x2), 6), round(max(x1, x2), 6), end='')

P.P.S.

ну и вы понимаете, что при a = 0 у вас D = 0 и происходит деление на 0?

при полном решении квадратного уравнения надо учесть что

  1. оно может быть не квадратным, а линейным (a = 0)
  2. оно может содержать бесконечное кол-во решений (a = 0, b = 0)

P.P.P.S.

вы же понимаете, что в этом коде:

elif D == 0:
    x1 = -b / (2 * a)
    if x1 % math.floor(x1) == 0:
        print(int(x1))

вывод результата будет только в 1 случае - если решение является целым числом?

→ Ссылка
Автор решения: Artem Davletov

Вы сами устанавливаете формат вывода, напишите '{0:.0f}'.format(x2) вместо '{0:.6f}'.format(x2)

→ Ссылка