Печать с плавающей точкой с определенным количеством нулей - PullRequest
6 голосов
/ 11 июня 2009

Я знаю, как контролировать количество десятичных знаков, но как мне конкретно контролировать количество нулей?

Например:

104.06250000 -> 104.0625   
119.00000 -> 119.0  
72.000000 -> 72.0 

Ответы [ 6 ]

9 голосов
/ 11 июня 2009

Как насчет использования десятичного модуля?

Из документации :

"Десятичный модуль включает в себя понятие значимых мест, так что 1,30 + 1,20 равно 2,50. Конечный ноль сохраняется для обозначения значимости. Это обычное представление для монетарных приложений. Для умножения в подходе" учебник "используются все цифры в мультипликатах. Например, 1,3 * 1,2 дает 1,56, а 1,30 * 1,20 дает 1,5600."

Функция normalize () удаляет завершающие нули:

>>> from decimal import *
>>> d1 = Decimal("1.30")
>>> d2 = Decimal("1.20")
>>> d3
Decimal("1.5600")
>>> d3.normalize()
Decimal("1.56")
5 голосов
/ 11 июня 2009

Я не думаю, что есть предопределенный формат для этого - формат в Python наследуется от C, и я почти уверен, что у вас нет нужного формата в C.

Теперь в Python 3 у вас есть специальная функция format , где вы можете выполнять свое собственное форматирование. Удалить последние нули в python очень просто: просто используйте метод strip:

a = 1.23040000
print str(a).rstrip('0')

Если вы хотите сохранить 0 после десятичной точки, это тоже не очень сложно.

4 голосов
/ 19 сентября 2012

Я думаю, что самым простым способом была бы «круглая» функция. в вашем случае:

>>> round(104.06250000,4)
104.0625
1 голос
/ 11 июня 2009

Оператор '%2.2f' будет выполнять одинаковое количество десятичных знаков независимо от количества значащих цифр в номере. Вам нужно будет определить это по номеру и вручную форматировать. Вы можете сократить это, напечатав строку с большим количеством знаков после запятой и убрав все завершающие нули.

Тривиальная функция для этого может выглядеть примерно так: intel_format() в приведенном ниже примере:

import re

foo_string = '%.10f' % (1.33333)
bar_string = '%.10f' % (1)

print 'Raw Output'
print foo_string
print bar_string

print 'Strip trailing zeros'
print re.split ('0+$', foo_string)[0]
print re.split ('0+$', bar_string)[0]

print 'Intelligently strip trailing zeros'
def intel_format (nn):
    formatted = '%.10f' % (nn)
    stripped = re.split('0+$', formatted)
    if stripped[0][-1] == '.':
        return stripped[0] + '0'
    else:
        return stripped[0]

print intel_format (1.3333)
print intel_format (1.0)

При запуске вы получите такой вывод:

Raw Output
1.3333300000
1.0000000000
Strip trailing zeros
1.33333
1.
Intelligently strip trailing zeros
1.3333
1.0
0 голосов
/ 30 июля 2014

Вы можете использовать формат строкового метода, если вы используете Python 2.6 и выше.

>>> print "{0}".format(1.0)
1.0
>>> print "{0}".format(1.01)
1.01
>>> print "{0}".format(float(1))
1.0
>>> print "{0}".format(1.010000)
1.01
0 голосов
/ 10 апреля 2011
def float_remove_zeros(input_val):
    """
    Remove the last zeros after the decimal point:
    * 34.020 -> 34.02
    * 34.000 -> 34
    * 0 -> 0
    * 0.0 -> 0
    """
    stripped = input_val
    if input_val != 0:
        stripped = str(input_val).rstrip('0').rstrip('.')
    else:
        stripped = 0
    return stripped
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...