@jjmail

Как округлить произвольное десятичное число без встроенных функций round и модуля math?

Всем привет! Подскажите пожалуйста, как правильно написать функцию для округления десятичного числа без встроенной функции round и других модулей вроде math. Только с помощью математических операций. В функции должно быть два аргумента, само число и количество знаков после зяпятой.
#пример
def my_round(number, ndigits):
    pass
my_round(2.1234567, 5)
  • Вопрос задан
  • 2256 просмотров
Решения вопроса 2
@nirvimel
Дело в том, что в математике не существует десятичных чисел.
Существуют: натуральные, целые, рациональные, вещественные, комплексные, и.т.д. Но десятичных чисел НЕТ!
Десятичная система счисления - это лишь форма записи для восприятия чисел человеком.
Но сами числа не волнуют разные формы записи, в которой человек их может (или не может) воспринимать.
В вычислительной технике все числа физически хранятся и обрабатываются в двоичной форме. Но это опять же только форма записи, это не делает сами числа "двоичными" (будто какими-то особенными). Десятичная система счисления в вычислительной технике используется кране редко. К вашему случаю это 100% не имеет никакого отношения, как и ко всем языкам высокого уровня (это число ассемблерные заморочки, которые были актуальны (минимум) лет тридцать пять назад).

Теперь поговорим об округлении вещественных чисел:
Дробная часть вещественного числа равна остатку от его деления на единицу. Целая часть соответственно равна разности самого числа и его дробной части.
Чтобы сохранить определенное количество разрядов после запятой число следует сначала сдвинуть влево на соответствующее число разрядов, взять его целую часть и сдвинуть обратно в право на столько же разрядов. Сдвиг влево/вправо реализуется умножением/делением на основание системы счисления, возведенное в степень равную количеству сдвигаемых разрядов.
Ответ написан
Комментировать
15432
@15432
Системный программист ^_^
def my_round(number, digits):
  multiplier = pow(10.0, digits)
  return int (number*multiplier + 0.5) / multiplier
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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