Роунд ()
Роунд () је уграђена функција доступна са питхон-ом. Вратит ће вам плутајући број који ће бити заокружен на децимална мјеста која су дата као улаз.
Ако децимале које треба заокружити нису наведене, сматра се 0 и заокружит ће се на најближи цијели број.
У овом водичу за Питхон научићете:
- Роунд ()
- Синтакса:
- Колики утицај може имати заокруживање? (Заокруживање вс скраћивање)
- Пример: Заокруживање бројева с пловком
- Пример: Заокруживање целобројних вредности
- Пример: Заокруживање на негативне бројеве
- Пример: Округли Нумпи низови
- Пример: Децимални модул
Синтакса:
round(float_num, num_of_decimals)
Параметри
- флоат_нум: број флоат-а који се заокружује.
- нум_оф_децималс: (опционално) Број децимала који се узимају у обзир приликом заокруживања. Није обавезан, а ако није наведен, подразумевано је 0, а заокруживање се врши на најближи цели број.
Опис
Метода роунд () узима два аргумента
- број који треба заокружити и
- децимална места која треба узети у обзир приликом заокруживања.
Други аргумент је опционалан и подразумевано је 0 када није наведен, и у том случају заокружиће се на најближи цели број, а тип повратка такође ће бити цео број.
Када су децимална места, односно други аргумент присутни, заокружиће се на број задатих места. Тип повратка биће флоат.
Ако број иза датог децималног места
- > = 5 од + 1 биће додато коначној вредности
- <5 од крајње вредности вратиће се до поменутих децималних места.
Повратна вредност
Вратиће целобројну вредност ако није дат нум_оф_децималс и плутајућу вредност ако је дат нум_оф_децималс. Имајте на уму да ће вредност бити заокружена на +1 ако је вредност након децималног зареза> = 5, у супротном ће вратити вредност онакву каква је до поменутих децималних места.
Колики утицај може имати заокруживање? (Заокруживање вс скраћивање)
Најбољи пример који показује утицај заокруживања је тржиште берзи. У прошлости, тј. 1982. године, Ванцоуверска берза (ВСЕ): користила је за скраћивање вредности акција на три децимале у свакој трговини.
То се радило готово 3000 пута дневно. Нагомилани одсеци доводе до губитка од око 25 поена месечно.
Пример скраћивања вредности у односу на заокруживање приказан је у наставку.
Бројеве с помичном зарезом који су генерисани у наставку сматрајте вредностима залиха. Тренутно га генеришем за низ
1.000.000 секунди између 0,01 и 0,05.
Примери:
arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
Да бих показао утицај заокруживања, написао сам мали део кода у коме прво морате да користите бројеве до само 3 децимале, тј. Скраћивање броја после 3 децимале.
Имам оригиналну укупну вредност, укупну вредност која долази из скраћених вредности и разлику између оригиналне и скраћене вредности.
На истом скупу бројева користим методу роунд () до 3 децимале и израчунавам зброј и разлику између изворне вредности и заокружене вредности.
Ево примера и резултата
Пример 1
import randomdef truncate(num):return int(num * 1000) / 1000arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]sum_num = 0sum_truncate = 0for i in arr:sum_num = sum_num + isum_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 = 0sum_truncate1 = 0for i in arr:sum_num1 = sum_num1 + isum_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 placesThe original sum is = 29985.958619386867The total using truncate = 29486.057The difference from original - truncate = 499.9016193868665Testing by using round() up to 3 decimal placesThe original sum is = 29985.958619386867The total using round = 29985.912The difference from original - round = 0.04661938686695066
Разлика између оригиналног и после скраћивања је 499,9016193868665, а од округлог је 0,04661938686695066
Чини се да је разлика веома велика, а пример показује како метода заокруживања () помаже у израчунавању близу тачности.
Пример: Заокруживање бројева с пловком
У овом програму ћемо видети како се заокружују речи на плутајуће бројеве
# 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 >5float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5print("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 : 11The rounded value without num_of_decimals is : 10The rounded value with num_of_decimals as 2 is : 10.35The rounded value with num_of_decimals as 2 is : 10.34
Пример: Заокруживање целобројних вредности
Ако случајно користите роунд () на целобројној вредности, вратиће вам број назад без икаквих промена.
# testing round() on a integernum = 15print("The output is", round(num))
Излаз:
The output is 15
Пример: Заокруживање на негативне бројеве
Погледајмо неколико примера како заокруживање делује на негативне бројеве
# testing round()num = -2.8num1 = -1.5print("The value after rounding is", round(num))print("The value after rounding is", round(num1))
Излаз:
C:\pythontest>python testround.pyThe value after rounding is -3The value after rounding is -2
Пример: Округли Нумпи низови
Како заокружити нумпи низове у питхон-у?
Да бисмо то решили, можемо користити нумпи модул и користити нумпи.роунд () или нумпи.ароунд () методу, као што је приказано у доњем примеру.
Коришћење нумпи.роунд ()
# testing round()import numpy as nparr = [-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]
Такође можемо користити нумпи.ароунд (), који вам даје исти резултат као што је приказано у примеру испод.
Пример: Децимални модул
Поред функције роунд (), питхон има и децимални модул који помаже у тачнијем руковању децималним бројевима.
Децимални модул долази са типовима заокруживања, као што је приказано доле:
- РОУНД_ЦЕИЛИНГ: заокружит ће се према Бескрају,
- РОУНД_ДОВН: заокружит ће вриједност према нули,
- ОКРУГЛИ_ПАТ: заокружит ће се према-Бесконачности,
- РОУНД_ХАЛФ_ДОВН: заокружит ће се на најближу вриједност која иде према нули,
- РОУНД_ХАЛФ_ЕВЕН: заокружит ће се на најближе са вриједношћу која иде на најближи паран цијели број,
- РОУНД_ХАЛФ_УП: заокружит ће се на најближе са вриједношћу која се креће од нуле
- РОУНД_УП: заокружит ће се тамо гдје ће вриједност одступити од нуле.
У децималном облику, метода куантизе () помаже заокруживању на фиксни број децималних места, а можете одредити и заокруживање које ће се користити, као што је приказано у примеру испод.
Пример:
Коришћењем округлих () и децималних метода
import decimalround_num = 15.456final_val = round(round_num, 2)#Using decimal modulefinal_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.46Using Decimal - ROUND_CEILING 15.46Using Decimal - ROUND_DOWN 15.45Using Decimal - ROUND_FLOOR 15.45Using Decimal - ROUND_HALF_DOWN 15.46Using Decimal - ROUND_HALF_EVEN 15.46Using Decimal - ROUND_HALF_UP 15.46Using Decimal - ROUND_UP 15.46
Резиме:
- Роунд (флоат_нум, Нум_оф_децималс) је уграђена функција доступна са питхон-ом. Вратиће вам флоат број који ће бити заокружен на децимална места која су дата као улаз.
- флоат_нум: број флоат-а који се заокружује.
- Нум_оф_децималс: То је број децимала који се узимају у обзир приликом заокруживања.
- Вратиће целобројну вредност ако није дат нум_оф_децималс и плутајућу вредност ако је дат нум_оф_децималс.