Большинство Pythonic способ распечатать * не более * некоторое количество десятичных знаков

Я хочу отформатировать список чисел с плавающей запятой максимум, скажем, 2 десятичных знака. Но мне не нужны конечные нули, и мне не нужны конечные десятичные точки.

Так, например, 4.001 => 4 , 4.797 => 4.8 , 8.992 => 8.99 , 13.577 => 13.58 .

Простое решение ('%.2f' % f).rstrip('.0') ('%.2f' % f).rstrip('0').rstrip('.') . Но это выглядит довольно уродливо и кажется хрупким. Любые более приятные решения, возможно, с некоторыми волшебными флагами формата?

  • Преобразовать строки Python в float явно используя запятую или точку как разделители
  • Математика с плавающей запятой в разных языках программирования
  • Ограничение поплавков на две десятичные точки
  • Формат / Подавление научной нотации из результатов агрегирования Python Pandas
  • Почему экспоненциальная нотация с десятичными значениями не выполняется?
  • Как я могу предотвратить csv.DictWriter () или writow () округление моих поплавков?
  • Как проверить, является ли строка числом (float)?
  • Как правильно округлить половину чисел с плавающей точкой в ​​Python?
  • 3 Solutions collect form web for “Большинство Pythonic способ распечатать * не более * некоторое количество десятичных знаков”

    Вам нужно отделить 0 и . зачистки; таким образом, вы никогда не удаляете естественное 0 .

    В качестве альтернативы используйте функцию format() , но это действительно сводится к одному и тому же:

     format(f, '.2f').rstrip('0').rstrip('.') 

    Некоторые тесты:

     >>> def formatted(f): return format(f, '.2f').rstrip('0').rstrip('.') ... >>> formatted(0.0) '0' >>> formatted(4.797) '4.8' >>> formatted(4.001) '4' >>> formatted(13.577) '13.58' >>> formatted(0.000000000000000000001) '0' >>> formatted(10000000000) '10000000000' 

    g formatter ограничивает вывод до n значащих цифр, отбрасывая конечные нули:

     >>> "{:.3g}".format(1.234) '1.23' >>> "{:.3g}".format(1.2) '1.2' >>> "{:.3g}".format(1) '1' 

    В целом работа со String [s] может быть медленной. Однако это еще одно решение:

     >>> from decimal import Decimal >>> precision = Decimal('.00') >>> Decimal('4.001').quantize(precision).normalize() Decimal('4') >>> Decimal('4.797').quantize(precision).normalize() Decimal('4.8') >>> Decimal('8.992').quantize(precision).normalize() Decimal('8.99') >>> Decimal('13.577').quantize(precision).normalize() Decimal('13.58') 

    Вы можете найти более подробную информацию здесь: http://docs.python.org/2/library/decimal.html

    Python - лучший язык программирования в мире.