сбросив трейлинг '.0' с поплавков - PullRequest
41 голосов
/ 22 декабря 2008

Я ищу способ преобразования чисел в строковый формат, отбрасывая все лишние '.0'

Входные данные представляют собой смесь чисел с плавающей точкой и строк. Желаемый вывод:

0 -> '0'

0.0 -> '0'

0,1 -> '0,1'

1.0 -> '1'

Я придумал следующее выражение генератора, но мне интересно, есть ли более быстрый способ:

(str(i).rstrip('.0') if i else '0' for i in lst)

Проверка подлинности предназначена для предотвращения превращения 0 в пустую строку.

РЕДАКТИРОВАТЬ: более или менее приемлемое решение, которое я имею сейчас, это:

('%d'%i if i == int(i) else '%s'%i for i in lst)

Просто кажется странным, что в python нет элегантного способа справиться с этим (довольно простым) случаем.

Ответы [ 16 ]

1 голос
/ 24 октября 2009
str(x)[-2:] == '.0' and int(x) or x
1 голос
/ 22 декабря 2008

Использование Python форматирование строки (используйте str.format () с Python 3.0):

from decimal import Decimal

def format_number(i):
    return '%g' % (Decimal(str(i)))
0 голосов
/ 07 июля 2017

Я имел дело со значением из словаря json (возвращаемого API). Все вышеперечисленное не помогло мне, поэтому я построил собственную вспомогательную функцию. Усекает все конечные нули.

Надеюсь, это кому-то поможет

def remove_zeros(num):
    nums = list(num)
    indexes = (list(reversed(range(len(nums)))))
    for i in indexes:
        if nums[i] == '0':
            del nums[-1]
        else:
            break
    return "".join(nums)

num = "0.000000363000"
print(remove_zeros(num))

отпечатков:

    0.000000363
0 голосов
/ 05 ноября 2016

FWIW, с Jinja2, где var = 10,3

{{ var|round|int }} будет излучать целое число 10

round(method='floor') и round(method='ceil') также доступны.

Так что были var2 = 10,9 {{ var|round(method='floor')|int }} по-прежнему будет излучать целое число 10

Точностью также можно управлять с помощью ключевого аргумента precision=0 функции round.

ref: http://jinja.pocoo.org/docs/dev/templates/#round

0 голосов
/ 22 декабря 2008

Используйте значение 0 и добавьте точку, если хотите. EG "% .0f."

>>> print "%.0f."%1.0
1.
>>> 
0 голосов
/ 22 декабря 2008
>>> '%g' % 0
'0'
>>> '%g' % 0.0
'0'
>>> '%g' % 0.1
'0.1'
>>> '%g' % 1.0
'1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...