Старая запись, но может быть выполнена следующим образом:
if (! function_exists ('strim')): function strim ($ str, $ charlist = "", $ option = 0 ) {$ return = ''; if (is_string ($ str)) {// Переводить HTML-объекты $ return = str_replace ("& amp; nbsp;", "", $ str); $ return = strtr ($ return, array_flip (get_html_translation_table (HTML_ENTITIES, ENT_QUOTES))); // Выберите триммер опций ($ option) {// Сбрасываем пробелы (и другие символы) из начала и конца строки по умолчанию: case 0: $ return = trim ($ return, $ charlist); ломать; // Сбрасываем пробелы (и другие символы) с начала строки case 1: $ return = ltrim ($ return, $ charlist); ломать; // Сбрасываем пробелы (и другие символы) из конца строки 2: $ return = rtrim ($ return, $ charlist); ломать; }} return $ return; } endif;
Стандартные функции trim () могут быть проблематичными, когда появляются объекты HTML. Вот почему я написал функцию «Super Trim», которая используется для решения этой проблемы, а также вы можете выбрать обрезку со стороны начала, конца или стенда строки.
Чтобы повторить то, что сказали другие (потому что я уже набрал его!), я даже не уверен, что такое значение имеет смысл в случае числа с плавающей запятой из-за разницы между десятичным и двоичным представление; часто число, представимое конечным числом десятичных цифр, будет иметь только двоичное представление с бесконечной цифрой.
В случае объекта decimal.Decimal
вы можете получить экспоненту с помощью метода as_tuple
, который возвращает именованный элемент с значком
, цифры
и экспоненты
:
& gt; & gt; & gt; d = decimal.Decimal ('56 .4325 ') & gt; & gt; & gt; & gt; & gt; & gt; d.as_tuple (). exponent -4 & gt; & gt; & gt; & gt; d = decimal.Decimal ('56 .43256436 ') & gt; & gt; & gt; & gt; & gt; d.as_tuple (). exponent -8
Отрицание экспоненты - это число цифр после десятичной точки, если показатель не превышает 0
.
«число десятичных знаков» на самом деле не является свойством числа с плавающей запятой из-за того, как они хранятся и обрабатываются внутри страны. Вы можете получить столько знаков после запятой, сколько хотите, из числа с плавающей запятой. Вопрос в том, насколько точно вы хотите. При преобразовании числа с плавающей точкой в строку часть процесса принимает решение о точности.
Попробуйте, например:
1.1 - int (1.1)
И вы увидите, что ответ:
0.10000000000000009
Итак, для этого случая число десятичных знаков равно 17. Это номер, который вы хотите?
Наверное, нет.
Вы можете, однако, округлить число до определенного числа десятичных знаков с помощью «round»:
round (3.1415 - int (3.1415), 3)
Для этого случая число десятичных дробей разрезается на 3.
t получить «количество десятичных знаков от поплавка», но вы можете определить точность и сколько хотите. Преобразование float в строку является одним из способов принятия такого решения.
Самый быстрый способ, которым я нашел для вычисления цифр после десятичной точки и округления числа, -
Вычисление цифр:
a = decimal.Decimal ('56 .9554362669143476 '); lenstr = len (str (a) .split (".") [1])
Calc, check and rounding:
a = decimal. Десятичный ('56 0,9554362669143476' ); a = round (float (a), 5) если len (str (a) .split (".") [1]) & gt; 5 else float (a)
Сравнение:
$ python2 -mtimeit 'import decimal; а = decimal.Decimal ('56 0,9554362669143476' ); round (float (a), 5) если a.as_tuple (). exponent & lt; -5 else float (a) '10000 циклов, лучше всего 3: 32,4 usec за цикл $ python -mtimeit' import decimal; а = decimal.Decimal ('56 0,9554362669143476' ); a = round (float (a), 5) если len (str (a) .split (".") [1]) & gt; 5 else float (a) '100000 циклов, лучше всего 3: 16,7 мксек за цикл
Мне нужно было что-то вроде этого, и я проверил некоторые из них, самый быстрый из которых я узнал:
str (число) [:: - 1] .find ('.') [ ! d1]
Из-за проблемы с плавающей запятой все модульные дали мне ложные результаты даже с Decimal (number) (обратите внимание, что мне это нужно в скрипте, чтобы фиксировать цены всего db)
len (str (Десятичная (str (число)))% Десятичная (1))) - 2
Необходимость поместить строку в десятичную строку довольно непростая когда у нас есть плавающие или что-то вроде.
Вот моя «скамья»: https://repl.it/FM8m/17
Если вы знаете, что у вас не будут проблемы с синтаксическим разбором (или если вы позволяете самому питону или какой-либо другой библиотеке справляться с этим, надеемся, что вы будете решать проблемы с локализацией) ... просто проанализируйте его и используйте modf . Возвращаемое значение представляет собой пару значений, одна из которых является неотъемлемой частью, другая - дробной частью.
float
, из которого я не могу получить число десятичных цифр.
– Constantinius
31 May 2011 в 17:05
Поскольку числа с плавающей запятой Python внутренне представлены как двоичные, а не десятичные, на самом деле нет ярлыка, кроме преобразования в десятичное. Единственный встроенный способ сделать это - преобразовать в строку. Вы можете написать свой собственный код, чтобы сделать десятичное преобразование и подсчитать цифры, но это будет дублирование усилий.
Наивный способ (уязвим для локального использования, упомянутый @jglouie):
len (foo.split ('.') [1])
, где foo - строка типа «23.512999238».
Как отметил @Thomas Jung и @Mark Ransom, это довольно наивно для некоторых угловых случаев, которые должны быть обрабатывается как ...
import re from locale import localeconv dec_pt = localeconv () ['decimal_point'] decrgx = re.compile ("\ d + (% s \ d +)? e (- | \ +) (\ d +) "% dec_pt), если decrgx.search (foo): # все еще выясняет, что это повышает значение NotImplementedError,« нотация не реализована »else: digits = len (foo.split (dec_pt) [- 1] )
1.0001e + 110
, а также 1e-110
. Вы должны разделить на locale.localeconv () ['decimal_point']
вместо '.'
, чтобы быть действительно надежными.
– Mark Ransom
31 May 2011 в 23:14
Десятичная библиотека предназначена для работы с десятичными числами, например, в бухгалтерии. У него по умолчанию нет функции для возврата числа десятичных знаков. Это особенно проблема, когда вы понимаете, что контекст, который он запускает, устанавливает его на то, что хочет пользователь.
Если вы получите строку, вы можете преобразовать ее в десятичную, но это будет либо привязать нули, чтобы довести вас до вашей точности, либо использовать настройку округления для ее усечения.
Лучше всего сделать ставку на точку в вашей строке и подсчитать количество символов в полученной подстроке.
Объекты Decimal
имеют метод класса from_float , который непосредственно преобразует float вDecimal
объекты. – senderle 31 May 2011 в 17:06exponent
does i> иногда идет выше нуля:decimal.Decimal (500) .normalize (). as_tuple (). exponent == 2
– senderle 27 June 2012 в 23:54