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.