Python функция round() с ПРИМЕРАМИ
Круглый()
Round() — встроенная функция, доступная в Python. Он вернет вам число с плавающей запятой, которое будет округлено до десятичных знаков, заданных в качестве входных данных.
Если десятичные знаки для округления не указаны, оно считается равным 0 и округляется до ближайшего целого числа.
Синтаксис
round(float_num, num_of_decimals)
параметры
- float_num: число с плавающей запятой, которое нужно округлить.
- num_of_decimals: (необязательно) Количество десятичных знаков, которые следует учитывать при округлении. Это необязательно, и если оно не указано, по умолчанию оно равно 0, а округление выполняется до ближайшего целого числа.
Описание
Метод round() принимает два аргумента
- число, которое нужно округлить, и
- десятичные знаки, которые следует учитывать при округлении.
Второй аргумент является необязательным и по умолчанию равен 0, если он не указан, и в этом случае он округляется до ближайшего целого числа, а тип возвращаемого значения также будет целым числом.
Если присутствуют десятичные знаки, то есть второй аргумент, он округляется до заданного количества знаков. Тип возвращаемого значения будет плавающим.
Если указано число после запятой
- >=5, чем +1 будет добавлено к окончательному значению
- <5, чем будет возвращено окончательное значение, поскольку оно соответствует указанным десятичным знакам.
Возвращаемое значение
Он вернет целое значение, если num_of_decimals не указано, и значение с плавающей запятой, если указано num_of_decimals. Обратите внимание, что значение будет округлено до +1, если значение после десятичной точки >=5, в противном случае оно вернет значение до указанных десятичных знаков.
Насколько сильное влияние может оказать округление? (Округление против усечения)
Лучшим примером влияния округления является фондовый рынок. В прошлом, то есть в 1982 году, Ванкуверская фондовая биржа (VSE): используется для усечения стоимости акций до трех десятичных знаков в каждой сделке.
Это повторялось почти 3000 раз каждый день. Накопленные сокращения приводят к потере около 25 пунктов в месяц.
Ниже показан пример усечения значений вместо округления.
Считайте числа с плавающей запятой, созданные ниже, ценами акций. Прямо сейчас я генерирую его для диапазона
1,000,000 0.01 0.05 секунд между XNUMX и XNUMX.
Примеры:
arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
Чтобы продемонстрировать влияние округления, я написал небольшой фрагмент кода, в котором сначала вам нужно использовать числа только до 3 знаков после запятой, то есть усекая число после 3 знаков после запятой.
У меня есть исходное общее значение, общее количество, полученное из усеченных значений, и разница между исходным и усеченным значением.
Для того же набора чисел я использовал метод round() до 3 десятичных знаков и вычислял сумму и разницу между исходным значением и округленным значением.
Вот пример и результат
Пример 1
import random def truncate(num): return int(num * 1000) / 1000 arr = [random.uniform(0.01, 0.05) for _ in range(1000000)] sum_num = 0 sum_truncate = 0 for i in arr: sum_num = sum_num + i sum_truncate = truncate(sum_truncate + i) print("Testing by using truncating upto 3 decimal places") print("The original sum is = ", sum_num) print("The total using truncate = ", sum_truncate) print("The difference from original - truncate = ", sum_num - sum_truncate) print("\n\n") print("Testing by using round() upto 3 decimal places") sum_num1 = 0 sum_truncate1 = 0 for i in arr: sum_num1 = sum_num1 + i sum_truncate1 = round(sum_truncate1 + i, 3) print("The original sum is =", sum_num1) print("The total using round = ", sum_truncate1) print("The difference from original - round =", sum_num1 - sum_truncate1)
Вывод:
Testing by using truncating upto 3 decimal places The original sum is = 29985.958619386867 The total using truncate = 29486.057 The difference from original - truncate = 499.9016193868665 Testing by using round() up to 3 decimal places The original sum is = 29985.958619386867 The total using round = 29985.912 The difference from original - round = 0.04661938686695066
Разница между оригиналом и после усечения составляет 499.9016193868665, а после округления - 0.04661938686695066.
Разница кажется очень большой, и пример показывает, как метод round() помогает производить вычисления, близкие к точности.
Пример: округление с плавающей запятой Numbers
В этой программе мы увидим, как округлять слова с плавающими числами.
# testing round() float_num1 = 10.60 # here the value will be rounded to 11 as after the decimal point the number is 6 that is >5 float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5 float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5 float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5 print("The rounded value without num_of_decimals is :", round(float_num1)) print("The rounded value without num_of_decimals is :", round(float_num2)) print("The rounded value with num_of_decimals as 2 is :", round(float_num3, 2)) print("The rounded value with num_of_decimals as 2 is :", round(float_num4, 2))
Вывод:
The rounded value without num_of_decimals is : 11 The rounded value without num_of_decimals is : 10 The rounded value with num_of_decimals as 2 is : 10.35 The rounded value with num_of_decimals as 2 is : 10.34
Пример: округление целых значений
Если вам случится использовать round() для целочисленного значения, он просто вернет вам число без каких-либо изменений.
# testing round() on a integer num = 15 print("The output is", round(num))
Вывод:
The output is 15
Пример: округление в отрицательную сторону Numbers
Давайте посмотрим несколько примеров того, как округляется отрицательные числа.
# testing round() num = -2.8 num1 = -1.5 print("The value after rounding is", round(num)) print("The value after rounding is", round(num1))
Вывод:
C:\pythontest>python testround.py The value after rounding is -3 The value after rounding is -2
Пример: круглые массивы Numpy
Как округлить numpy массивы в питоне?
Чтобы решить эту проблему, мы можем использовать модуль numpy и метод numpy.round() или numpy.around(), как показано в примере ниже.
Использование numpy.round()
# testing round() import numpy as np arr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323] arr1 = np.round(arr, 2) print(arr1)
Вывод:
C:\pythontest>python testround.py [-0.34 1.46 4.23 -0.34 7.63 5.12]
Мы также можем использовать numpy.around(), который дает тот же результат, что показан в примере ниже.
Пример: Десятичный модуль
В дополнение к функции round() в Python есть десятичный модуль, который помогает более точно обрабатывать десятичные числа.
Модуль Decimal имеет типы округления, как показано ниже:
- ROUND_CEILING: округляется в сторону бесконечности,
- ROUND_DOWN: округляет значение в сторону нуля,
- ROUND_FLOOR: округляется в сторону -бесконечности,
- ROUND_HALF_DOWN: округляется до ближайшего значения, приближающегося к нулю,
- ROUND_HALF_EVEN: округляется до ближайшего целого числа,
- ROUND_HALF_UP: округляется до ближайшего значения, отходящего от нуля.
- ROUND_UP: округление происходит в том месте, где значение будет отличаться от нуля.
В десятичном формате метод quantize() помогает округлять до фиксированного количества десятичных знаков, и вы можете указать, какое округление будет использоваться, как показано в примере ниже.
Пример:
Использование методов round() и decimal
import decimal round_num = 15.456 final_val = round(round_num, 2) #Using decimal module final_val1 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_CEILING) final_val2 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_DOWN) final_val3 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_FLOOR) final_val4 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_DOWN) final_val5 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_EVEN) final_val6 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP) final_val7 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP) print("Using round()", final_val) print("Using Decimal - ROUND_CEILING ",final_val1) print("Using Decimal - ROUND_DOWN ",final_val2) print("Using Decimal - ROUND_FLOOR ",final_val3) print("Using Decimal - ROUND_HALF_DOWN ",final_val4) print("Using Decimal - ROUND_HALF_EVEN ",final_val5) print("Using Decimal - ROUND_HALF_UP ",final_val6) print("Using Decimal - ROUND_UP ",final_val7)
Вывод:
Using round() 15.46 Using Decimal - ROUND_CEILING 15.46 Using Decimal - ROUND_DOWN 15.45 Using Decimal - ROUND_FLOOR 15.45 Using Decimal - ROUND_HALF_DOWN 15.46 Using Decimal - ROUND_HALF_EVEN 15.46 Using Decimal - ROUND_HALF_UP 15.46 Using Decimal - ROUND_UP 15.46
Резюме
- Round(float_num, Num_of_decimals) — это встроенная функция, доступная в Python. Он вернет вам число с плавающей запятой, которое будет округлено до десятичных знаков, заданных в качестве входных данных.
- float_num: число с плавающей запятой, которое нужно округлить.
- Num_of_decimals: это количество десятичных знаков, которые следует учитывать при округлении.
- Он вернет целое значение, если num_of_decimals не указано, и значение с плавающей запятой, если указано num_of_decimals.