требуется угловой календарь IOS на год, как в [https://github.com/MariemChaabeni/angular-calendar-year-view] для angular6

Вы можете использовать следующий класс MyFloat вместо встроенного класса float.

def _remove_leading_zero(value, string):
    if 1 > value > -1:
        string = string.replace('0', '', 1)
    return string


class MyFloat(float):
    def __str__(self):
        string = super().__str__()
        return _remove_leading_zero(self, string)

    def __format__(self, format_string):
        string = super().__format__(format_string)
        return _remove_leading_zero(self, string)

С помощью этого класса вам придется использовать функцию str.format вместо оператора модуля ( %) для форматирования. Ниже приведены некоторые примеры:

>>> print(MyFloat(.4444))
.4444

>>> print(MyFloat(-.4444))
-.4444

>>> print('some text {:.3f} some more text',format(MyFloat(.4444)))
some text .444 some more text

>>> print('some text {:+.3f} some more text',format(MyFloat(.4444)))
some text +.444 some more text

Если вы также хотите заставить оператор модуля (%) класса str вести себя одинаково, тогда вам придется переопределить __mod__ метод класса str путем подкласса класса. Но это будет не так просто, как переопределить метод __format__ класса float, так как в этом случае отформатированное число с плавающей точкой может присутствовать в любой позиции в результирующей строке.

[Примечание: Все приведенные выше коды написаны на Python3. Вам также придется переопределить __unicode__ в Python2, а также изменить вызовы super.]

PS: Вы также можете переопределить метод __repr__, аналогичный __str__, если вы также хотите изменить официальное строковое представление в MyFloat.




Изменить: на самом деле вы можете добавить новый синтаксис для форматирования sting с помощью __format__ метод. Таким образом, если вы хотите сохранить оба поведения, то есть показывать ведущий нуль, когда это необходимо, и не показывать начальный ноль, когда это не нужно. Вы можете создать класс MyFloat следующим образом:

class MyFloat(float):
    def __format__(self, format_string):
        if format_string.endswith('z'):  # 'fz' is format sting for floats without leading the zero
            format_string = format_string[:-1]
            remove_leading_zero = True
        else:
            remove_leading_zero = False

        string = super(MyFloat, self).__format__(format_string)
        return _remove_leading_zero(self, string) if remove_leading_zero else string
        # `_remove_leading_zero` function is same as in the first example

И использовать этот класс следующим образом:

>>> print('some text {:.3f} some more text',format(MyFloat(.4444)))
some text 0.444 some more text
>>> print('some text {:.3fz} some more text',format(MyFloat(.4444)))
some text .444 some more text


>>> print('some text {:+.3f} some more text',format(MyFloat(.4444)))
some text +0.444 some more text
>>> print('some text {:+.3fz} some more text',format(MyFloat(.4444)))
some text +.444 some more text


>>> print('some text {:.3f} some more text',format(MyFloat(-.4444)))
some text -0.444 some more text
>>> print('some text {:.3fz} some more text',format(MyFloat(-.4444)))
some text -.444 some more text

Обратите внимание, что использование 'fz' вместо 'f' удаляет начальный нуль.

Кроме того, приведенный выше код работает как в Python2, так и в Python3.

0
задан Sathyamoorthy Jagannathan 5 March 2019 в 05:55
поделиться

1 ответ

Возможно, вы используете старую версию TypeScript. Чтобы проверить свою версию, запустите команду tsc --version.

Если ваша версия старше последней (3.3.3333), найдите ее с помощью команды which tsc и удалите.

Удалите глобальный TypeScript с помощью команды npm uninstall -g typescript и установите последнюю стабильную версию с помощью команды: npm install -g typescript

0
ответ дан Yasir Arafat 5 March 2019 в 05:55
поделиться
Другие вопросы по тегам:

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