6

Надо вывести число a типа float на экран c точностью не менее n знаков после запятой.
Python 3, без использования библиотек.

4 Answers4

3
n = 5
a = 1.2345678912345
template = '{:.' + str(n) + 'f}'
print(template.format(a))
Jenyay
  • 1,981
  • 2
    Альтернативно еще есть функция format (а не метод для строк): format(2.123456789, ".5f"). Возможные аргументы для форматирования описаны по адресу https://docs.python.org/3/library/string.html#formatspec – m9_psy Nov 17 '16 at 10:22
  • Решение приемлемо, однако надо получить ответ с точностью НЕ МЕНЕЕ n цифр после запятой. Поэтому убирать лишние знаки после запятой необязательно - чем точнее тем лучше:) –  Nov 17 '16 at 10:26
  • 1
    А тогда не понятно, чем ограничивать вывод. Ведь из-за двоичного представления никто не гарантирует, что после последнего введенного числа после запятой будут одни нули. Например, в том же примере можете поменять n на 25, и посмотреть на результат. – Jenyay Nov 17 '16 at 10:30
  • @Jenyay,1)По поводу 25, ну так это у вас ошибка)) хотите сказать, что 1.234566678912345 не равно 1.234567891234500000000000? 2)Как это чем ограничивать вывод? Есть конечное рациональное число типа float. Если количество знаков после запятой больше n, просто выведите a. –  Nov 17 '16 at 10:56
  • @Sithell: сейчас уже поздно (это существующие ответы делает неверными), но слова "чем точнее тем лучше" следует в вопросе помещать. Сейчас ваш вопрос читается что вы хотите 2 в 2.000.. превратить (0 повторен n раз). Если вам нужен точный результат, то просто repr(a) вызовите (это не фиксированный формат). Формально, так как n <= n истинно, то любой ответ, который возвращает n цифр, возвращает не менее n цифр. – jfs Nov 17 '16 at 11:10
  • @jfs, я не сказал что ответ неверный, я сказал что решение приемлемо. Все же признаюсь, что несколько неправильно сформулировал вопрос, но менять уже поздно. Извиняюсь. Засчитать ответ товарища как правильный? –  Nov 17 '16 at 11:14
  • @Sithell: принятие ответа не делает его "правильным". Принятый ответ—это просто ответ, который лично для вас (автора) сработал. Желательно, чтобы он также отвечал на вопрос как он сформулирован (как написан), вне зависимости от того как он в голове автора выглядит (будущие читатели могут не знать о ваших точных намерениях). Другие участники с помощью голосования могут для себя полезные ответы выделять. – jfs Nov 17 '16 at 11:37
  • @Sithell зависит от способа сравнения в языке. Число 1.234566678912345 точно представить в двоичном виде не удастся (если не использовать особые ухищрения). Например, в Python 3.5 результат print(1.234566678912345 == 1.23456667891234500000001) дает True. – Jenyay Nov 17 '16 at 11:42
  • @Jenyay: столько ноликов можно не указывать: 1.234566678912345 == 1.2345666789123451 . Объяснение. – jfs Aug 04 '17 at 09:14
3

Python 3.6+:

>>> a = 2
>>> n = 3
>>> f'{a:.{n}f}'
'2.000'

Или (на более ранних версиях):

>>> '{a:.{n}f}'.format(**vars())
'2.000'
jfs
  • 52,361
0

Вот какой вариант решения получается у меня:

>>> a = 2.0
>>> n = 5
>>> print(str(a).ljust(len(str(int(a)))) + n + 1, '0')
5.00000

или

>>> a = 2.12345678
>>> n = 5
>>> print(str(a).ljust(len(str(int(a)))) + n + 1, '0')
2.12345678
  • количество скобочек неверно (SyntaxError). Даже если добавить скобочку, возвращается 2000000 для a,n=2,5 вместо ожидаемого '2.00000'. Для чисел типа 1e-10 возвращает '1e-1000' (что вряд ли является желаемым результатом). – jfs Nov 17 '16 at 13:29
0
def rounds(num, max_=2):
    '''с точностью не более n "значащих цифр", после запятой. '''
    left, right = str(num).split('.')
    zero, nums = zero_nums = [], []
    for n in right:
        zero_nums[0 if not nums and n == '0' else 1].append(n)
        if len(nums) == max_:
            break
    return '.'.join([left, ''.join(zero) + ''.join(nums)])


print(rounds(0.0102345, 3))
>>>0.0102
print(rounds(0.000102345, 4))
>>>0.0001023
vadim vaduxa
  • 8,897
  • эээм, а с чего вы взяли, что нужно с точностью "не более n"? Я ведь даже выделил в вопросе жирным "НЕ МЕНЕЕ" –  Nov 18 '16 at 07:44
  • тк c точностью не менее n, это странно. А если после запятой менее чем n знаков, дописывать нули? А если больше, то ничего и делать не надо, тк условие удовлетворяется автоматически. – vadim vaduxa Nov 18 '16 at 10:38
  • да, вы правильно поняли вопрос –  Nov 21 '16 at 19:24