Python Десятичный формат

Ответ слишком прост для меня, поэтому я создал более общий динамический оператор SQL, который проверяет, имеет ли человек какие-либо перекрывающиеся даты.

SELECT DISTINCT T1.EmpID
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.EmpID = T2.EmpID 
    AND T1.JobID <> T2.JobID
    AND (
        (T1.DateFrom >= T2.DateFrom AND T1.dateFrom <= T2.DateTo) 
        OR (T1.DateTo >= T2.DateFrom AND T1.DateTo <= T2.DateTo)
        OR (T1.DateFrom < T2.DateFrom AND T1.DateTo IS NULL)
    )
    AND NOT (T1.DateFrom = T2.DateFrom)
60
задан unutbu 5 March 2010 в 21:15
поделиться

3 ответа

Если у вас Python 2.6 или новее, используйте формат :

'{0:.3g}'.format(num)

Для Python 2.5 или старше:

'%.3g'%(num)

Пояснение:

{0} сообщает формат ] для вывода первого аргумента - в данном случае num .

Все, что находится после двоеточия (:), указывает format_spec .

.3 устанавливает точность равной 3.

g удаляет незначительные нули. См. http://en.wikipedia.org/wiki/Printf#fprintf

Например:

tests=[(1.00, '1'),
       (1.2, '1.2'),
       (1.23, '1.23'),
       (1.234, '1.23'),
       (1.2345, '1.23')]

for num, answer in tests:
    result = '{0:.3g}'.format(num)
    if result != answer:
        print('Error: {0} --> {1} != {2}'.format(num, result, answer))
        exit()
    else:
        print('{0} --> {1}'.format(num,result))

дает

1.0 --> 1
1.2 --> 1.2
1.23 --> 1.23
1.234 --> 1.23
1.2345 --> 1.23

Используя Python 3.6 или новее, вы можете использовать f -strings :

In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'
108
ответ дан 24 November 2019 в 14:56
поделиться

Вот функция, которая поможет:

def myformat(x):
    return ('%.2f' % x).rstrip('0').rstrip('.')

И вот ваши примеры:

>>> myformat(1.00)
'1'
>>> myformat(1.20)
'1.2'
>>> myformat(1.23)
'1.23'
>>> myformat(1.234)
'1.23'
>>> myformat(1.2345)
'1.23'

Изменить:

Из просмотра ответов других людей Поэкспериментировав, я обнаружил, что g делает все стриптиз за вас. Итак,

'%.3g' % x

тоже прекрасно работает и немного отличается от того, что предлагают другие (с использованием материала '{0: .3}'. Format ()). Думаю, сделай твой выбор.

12
ответ дан 24 November 2019 в 14:56
поделиться

Просто используйте стандартные методы форматирования строк Python :

>>> "{0:.2}".format(1.234232)
'1.2'
>>> "{0:.3}".format(1.234232)
'1.23'

Если вы используете версию Python ниже 2.6, используйте

>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'1'
4
ответ дан 24 November 2019 в 14:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: