Удаление посторонних знаков после запятой при использовании десятичного числа Python.
При использовании десятичного десятичного класса Python.Decimal класс теперь нам нужно отказаться от посторонних знаков после запятой. Так, например, “0.00” становится “0”, а “0.50” становится “0,5”. Есть ли более чистый способ сделать это, чем преобразовать в строку и вручную отбросить конечные нули и полные остановки?
Чтобы уточнить, нам нужно иметь возможность динамически обходить результат, не зная числа десятичных знаков заранее и потенциально выводить целое число (или строковое представление одного), если десятичные числа не нужны… это уже встроенное Python?
Удаление конечных нулей в Python [дубликат]
Мне нужно найти способ конвертировать следующие строки в Python:
и так далее. Я попытался .rstrip (‘0’). Rstrip (‘.’), Но это не работает, если ввод 0 или 00.
Есть идеи? Спасибо!
7 ответов
Обновлено . Обобщено для обеспечения точности и обработки невидимых значений.
Вы можете использовать строки формата , если хотите, но имейте в виду, что вам может потребоваться установить желаемую точность, так как строки форматирования имеют собственную логику для этого по умолчанию. Яннеб предлагает с точностью до 17 в другой ответ .
Подумав об этом еще немного, я думаю, что самое простое и лучшее решение — просто дважды привести строку (как Джатанизм предполагает ):
Изменить: добавлено пояснение из-за комментария.
Для чисел с плавающей запятой вы можете просто привести строку к float :
Для нулевых значений вы можете просто привести их к целому числу:
При печати числовые значения автоматически преобразуются в строки. Если вам нужно, чтобы они действительно были строками, вы можете просто привести их обратно к строкам с помощью str() , например:
в зависимости от того, что вы на самом деле хотите сделать ..
Вывод (Python 2.7.1):
ДОПОЛНЕНИЕ К РЕДАКЦИИ 2 из моего другого ответа
(все должно было быть долго только в одном посте)
Шаблон регулярного выражения определяет 4 подшаблонов, каждый из которых соответствует определенному типу чисел. Каждый раз, когда регулярное выражение совпадает с частью строки, есть только один из подшаблонов, который соответствует, следовательно, есть возможность использовать mat.lastindex в функции замены. Следующий код показывает совпадения подшаблона с различными числами:
ПЕРВЫЙ «РЕШЕНИЕ»
РЕДАКТИРОВАТЬ 1
Джон Мачин сказал, что 10000 и 10000.000 производят 1 вместо 10000
Я исправил функцию замены с помощью (?!(?<=0)\.)
РЕДАКТИРОВАТЬ 2
Исправить оставшиеся недостатки [ ‘. 0000’ , производящие ‘.’ , на которые указал Джон Мачин, и ‘000078000’ , производящие ’78 ‘], я переписал регулярное выражение для новой идеи. Это проще Регулярное выражение обнаруживает все типы чисел.
Это решение не только удаляет завершающие нули, но и нули заголовка. Вот сравнение этого решения с tidy_float() Джоном Мачином, number_format() arussell84 ‘<:g>‘.format() . Есть некоторые различия между результатами моей функции (все верно на этот раз) и другими:
pat = ‘% 18s% -15s% -15s% -15s% s’ li = [pat% (‘проверенное число’, ‘float_shaver’, ‘Tidy_float’, «format_number ()», » ‘<: г>‘ формат ().»)] li.extend (pat% (n, number_shaver (n), tidy_float (n), format_number (n), format_float (n)) если n! = ‘\ n’ иначе ‘\ n’ для n в числах)
print ‘\ n’.join (li)
Я считаю, что у моего решения есть два преимущества:
регулярное выражение и функция number_shave () являются короткими
number_shave () не только обрабатывает одно число одновременно, но также обнаруживает и обрабатывает все числа в строке. Вот обработка, которую не могут сделать решения Джона Мачина и arrussel84:
результаты обработки строк, содержащих несколько чисел:
Следовательно, регулярное выражение также можно использовать, чтобы просто найти все числа в строке, не удаляя нули, если не желательно.
PS: , см. другой мой ответ, который объясняет регулярное выражение и его функционирование
Как убрать знаки после запятой python
Как отбросить лишние знаки после запятой внутри формулы
Здравствуйте! В общем нужно отбросить лишние знаки после запятой после вычислений, но через.