- Простой способ найти десятичные разряды
- 9 ответов
- РЕДАКТИРОВАТЬ
- 3 способа определить количество разрядов в числе в Python
- Введение
- Длинный способ с циклом while
- Короткий способ циклом for
- Самый быстрый способ
- Заключение
- Определить максимальные цифры в числе и их разряды
- Задача — Определить количество разрядов числа — программирование на разных языках
- Задача — Определить количество разрядов числа — программирование на Pascal, Си, Кумир, Basic-256, Python
- Pascal
- Язык Си
- Python
- КуМир
- Basic-256
Простой способ найти десятичные разряды
Есть ли простой способ или встроенная функция, чтобы узнать десятичные разряды числа с плавающей запятой?
Число разбирается из строки, поэтому одним из способов является подсчет цифр после «.» знак, но это выглядит довольно неуклюжим для меня. Есть ли возможность получить необходимую информацию из объекта float или Decimal ?
РЕШЕНИЕ (конечно, один из них :))
Я решил использовать десятичный класс Python. Десятичный класс, чтобы помочь мне с моей проблемой:
e = abs(Decimal(string_value).as_tuple().exponent)
ПРИМЕЧАНИЕ: это работает только тогда, когда параметр, из которого создается десятичное число, является строкой, а не плавающей точкой (что может привести к неточностям с плавающей запятой).
Большое спасибо за все другие вклады.
9 ответов
Чтобы повторить то, что сказали другие (потому что я уже напечатал это!), Я даже не уверен, что такое значение будет иметь смысл в случае числа с плавающей запятой из-за разницы между десятичным и двоичным представлением; часто число, представимое конечным числом десятичных цифр, будет иметь только двоичное представление с бесконечной цифрой.
В случае объекта decimal.Decimal вы можете получить показатель степени, используя метод as_tuple , который возвращает именованный кортеж с атрибутами sign , digits и exponent :
>>> d = decimal.Decimal('56.4325') >>> d.as_tuple().exponent -4 >>> d = decimal.Decimal('56.43256436') >>> d.as_tuple().exponent -8
Отрицание показателя степени — это число цифр после десятичной точки, если показатель степени не превышает 0 .
Поскольку числа с плавающей запятой в Python внутренне представляются как двоичные, а не десятичные, на самом деле нет другого пути, кроме преобразования в десятичное. Единственный встроенный способ сделать это — преобразовать в строку. Вы можете написать свой собственный код для выполнения десятичного преобразования и подсчета цифр, но это будет дублированием усилий.
Если вы знаете, что у вас не возникнет проблем с синтаксическим анализом (или если вы позволите Python самому или какой-либо другой библиотеке справиться с этим, надеясь, что вы решите проблемы с локализацией) . просто проанализируйте его и используйте modf. Возвращаемое значение представляет собой пару значений, одно из которых является неотъемлемой частью, а другое — дробной частью.
Самый быстрый способ, который я нашел для цифр вычисления после десятичной точки и округления числа
a=decimal.Decimal('56.9554362669143476'); lenstr = len(str(a).split(".")[1])
Вычисление, проверка и округление:
a=decimal.Decimal('56.9554362669143476'); a = round(float(a),5) if len(str(a).split(".")[1]) > 5 else float(a)
$ python2 -mtimeit 'import decimal; a=decimal.Decimal('56.9554362669143476'); round(float(a),5) if a.as_tuple().exponent < -5 else float(a)' 10000 loops, best of 3: 32.4 usec per loop $ python -mtimeit 'import decimal; a=decimal.Decimal('56.9554362669143476'); a = round(float(a),5) if len(str(a).split(".")[1]) >5 else float(a)' 100000 loops, best of 3: 16.7 usec per loop
Десятичная библиотека предназначена для работы с десятичными числами, как в бухгалтерии. По сути, он не имеет функции для возврата количества десятичных знаков. Это особенно проблема, когда вы понимаете, что контекст, в котором он работает, устанавливает его в соответствии с тем, что хочет пользователь.
Если вы получили строку, вы можете преобразовать ее в десятичную, но при этом вы либо добавите нули, чтобы получить точность, либо воспользуетесь настройкой округления для ее усечения.
Ваша лучшая ставка, вероятно, будет заключаться в разделении на точку в вашей строке и подсчете количества символов в результирующей подстроке.
«Число десятичных разрядов» не является свойством числа с плавающей запятой из-за того, как они хранятся и обрабатываются внутри.
Вы можете получить столько десятичных разрядов, сколько захотите, из числа с плавающей запятой. Вопрос в том, сколько точности вы хотите. При преобразовании числа с плавающей запятой в строку часть процесса определяет точность.
Таким образом, для этого случая число десятичных дробей равно 17. Возможно, это не то число, которое вы ищете.
Вы можете, однако, округлить число до определенного количества десятичных знаков с помощью «round»:
Для этого случая число десятичных дробей сокращается до 3.
Вы не можете получить «количество десятичных дробей от числа с плавающей запятой», но вы можете решить, какую точность и сколько вы хотите.
Преобразование числа с плавающей точкой в строку является одним из способов принятия такого решения.
Наивный способ (уязвимый для локального использования, упомянутого @jglouie)
Где 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) if decrgx.search(foo): # still figuring this out raise NotImplementedError, "e notation not implemented" else: digits = len(foo.split(dec_pt)[-1])
Мне нужно было что-то вроде этого, и я протестировал некоторые из них, самый быстрый, который я обнаружил, был:
Из-за проблемы с плавающей запятой все по модулю дали мне ложные результаты даже с десятичным числом (заметьте, что мне нужно было это в скрипте, чтобы зафиксировать цены на весь дб)
len(str(Decimal(str(number))) % Decimal(1))) - 2
Необходимость поместить строку в десятичную систему довольно непросто, когда у нас есть числа с плавающей запятой или что-то в этом роде.
В случае, если вам нужно только найти десятичную точку наиболее значимой цифры, т.е. самый левый, другое примитивное решение будет:
fraction = 0.001 decimal_places = int(f''.split('e')[-1])
Это использует научную нотацию (m x 10 ^ n), которая уже предоставляет число десятичных разрядов в виде степени (n), равной 10, до которой повышается коэффициент (m), т.е. -3, полученный из 1.000000e-03 для приведенного выше примера.
Важным отличием от Decimal(str(fraction)).as_tuple().exponent является то, что научная запись всегда будет рассматривать только самую значимую цифру для показателя степени n, аналогично Decimal().adjusted() , тогда как Decimal().as_tuple().exponent возвращает экспоненту наименьшей значащей цифры.
Форматирование строк в научной нотации может, конечно, также обрабатывать только числа с плавающей запятой и никаких строк, поэтому любые арифметические проблемы с плавающей запятой сохраняются. Однако для многих случаев использования вышеупомянутого может быть достаточно.
3 способа определить количество разрядов в числе в Python
Статьи
Введение
В ходе статьи рассмотрим три вариации кода для определения количества разрядов в ведённом пользователем числе на языке программирования Python.
Длинный способ с циклом while
Дадим пользователю возможность ввести число:
Если было введено отрицательное число, нужно его сделать положительным. Для этого добавим его в модуль методом abs():
n = int(input('Введите число: ')) n = abs(n)
Добавим переменную count равную нулю:
n = int(input('Введите число: ')) n = abs(n) count = 0
Создадим цикл while, который не закончится, пока n > 0. В цикле будем убирать последнюю цифру в переменной n, а к count прибавлять единицу:
n = int(input('Введите число: ')) n = abs(n) count = 0 while n > 0: n //= 10 count += 1
Осталось вывести результат:
n = int(input('Введите число: ')) n = abs(n) count = 0 while n > 0: n //= 10 count += 1 print(count) # Введите число: 164832 # 6
Короткий способ циклом for
Обычно подобным не занимаются при помощи цикла for, но почему бы и нет. Как и в предыдущем способе даём пользователю возможность ввода числа, и добавляем его в модуль. Также создаём переменную count равную нулю:
n = abs(int(input('Введите число: '))) count = 0
Создадим цикл for, в котором пройдёмся по количеству символов в переменной n. Внутри цикла прибавляем к count единицу:
n = abs(int(input('Введите число: '))) count = 0 for i in range(len(str(n))): count += 1
Выведем результат в консоль:
n = abs(int(input('Введите число: '))) count = 0 for i in range(len(str(n))): count += 1 print(count) # Введите число: 111 # 3
Самый быстрый способ
Как и в предыдущих способах даём пользователю возможность ввода числа, и добавляем его в модуль:
n = abs(int(input('Введите число: ')))
Теперь в переменную count сохраним длину значения преобразованного в строковый тип данных в переменной n:
n = abs(int(input('Введите число: '))) count = len(str(n))
n = abs(int(input('Введите число: '))) count = len(str(n)) print(f'В числе находится разрядов.') # Введите число: 17424312 # В числе 17424312 находится 8 разрядов.
Заключение
В ходе статьи мы с Вами разобрали целых 3 способа определить количество разрядов в числе в Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂
Определить максимальные цифры в числе и их разряды
Программа выводит максимальную цифру и его разряд, но не предусматривает, что таких цифр может быть несколько, то есть если я введу «1566663», то результатом программы будет «6 » и «2», а мне нужно «6» и «2, 3, 4, 5»
Написать программу, находящую максимальные цифры в числе
написать программу в паскале о нахождение max цифры в числе.
Дано натуральное число N. Определить две его максимальные цифры
Дано натуральное число N. Определить две его максимальные цифры c помощью repeat
Дано целое число а, поменять максимальные и минимальные разряды местами
Вот смотрите я написал код, где в нём ошибка? Я что то не пойму #include<stdio.h>.
Если в данном числе есть цифры «2» и «5», то определить, какая из них расположена в числе левее
Помогите, пожалуйста.Нужно составить циклы с предусловием и постусловием. VBA Задание Дано.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
a = int(input()) count = len(str(a)) - 1 indexofmax = [] indexofmax.append(count) max1 = a % 10 a = a // 10 while a > 0: count -= 1 if a % 10 == max1: indexofmax.append(count) if a % 10 > max1: indexofmax.clear() max1 = a % 10 indexofmax.append(count) a = a // 10 print(indexofmax) print(max1)
a='1566663' print(max(a)) print(*[i for i,j in enumerate(a[::-1], 1) if j==max(a)])
Определить номер цифры в числе
Дано натуральное число. Определить номер некоторой заданной цифры в нем, считая от конца числа.
Определить четные цифры в числе
Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления определить.
Определить, повторяются ли цифры в числе
Нужно ввести число и в результате получить сообщение повторяются цифры в числе или нет.Способ.
Определить есть ли в числе цифры 2 и 5
не могу составить программу в турбо паскале дано натуральное число. Определить есть ли в нем числа.
Дано натуральное число. Определить две его максимальные цифры и их порядковые номера
через любой из циклов: while, repeat или for
Задача — Определить количество разрядов числа — программирование на разных языках
Задача — Определить количество разрядов числа
— программирование на Pascal, Си, Кумир, Basic-256, Python
Написать функцию, которая определяет количество разрядов введенного целого числа.
Чтобы программно посчитать количество разрядов числа, необходимо последовательно его делить нацело на 10, пока это число не станет равным нулю. При этом считать количество делений. Например, дано число 345. После первого деления останется 34, после второго — 3, после третьего — 0. Таким образом, мы видим, что количество делений равно количеству разрядов числа.
Для реализации данного алгоритма следует использовать цикл «пока» (while). Условием его выполнения является неравенство числа нулю. Хотя, если вводятся только положительные числа или перед этим отрицательное число превращают в положительное, в условии может быть «больше нуля».
Перед циклом вводится переменная-счетчик (например, i), которой присваивается значение 0 и которая при каждом делении заданного числа внутри цикла увеличивается на единицу. После завершения деления именно ее значением будет определяться количество разрядов числа.
Поскольку надо написать функцию, то скорее всего эта функция должна принимать заданное число, а возвращать количество разрядов.
Pascal
function digits (n:longint): byte;
var i: byte;
begin
i := 0;
while n > 0 do begin
n := n div 10;
i := i + 1
end;
digits := i
end;
begin
write (‘Введите число: ‘);
readln (num);
if num writeln (‘Количество разрядов = ‘, digits(num));
end. Введите число: -98
Количество разрядов = 2
Язык Си
int digits(int n) int i;
if (n < 0) n = -n;
while (n > 0) n = n/10;
i += 1;
>
return i;
> 3543
4
Python
def digits(n):
i = 0
while n > 0:
n = n//10
i += 1
return i
num = abs(int(input(‘Введите число: ‘)))
print(‘Количество разрядов:’, digits(num)) Введите число: 65098234
Количество разрядов: 8
КуМир
алг колич_разрядов
нач
цел num
ввод num
вывод разряды(num)
кон
алг цел разряды(цел n)
нач
цел i, m
m := n
i := 0
если m < 0 то m := -m всё
нц пока m > 0
m := div(m,10)
i := i+1
кц
знач := i
кон -562
3
Basic-256
input num
gosub digits
end
digits:
if num < 0 then num = abs(num)
i = 0
while num > 0
num = num 10
i = i + 1
endwhile
print i
return -7823342
7