Како заокружити бројеве у Питхон-у [With Examples]

Радите са нумеричким типовима података у Питхон-у? Подигните ниво тако што ћете научити различите начине заокруживања бројева у Питхон-у.

Већина скупова података из стварног света садржи нумеричке, као и категоричке карактеристике. Постоји широк спектар нумеричких карактеристика, од очитавања сензора до курса валута, биомедицинских сигнала и још много тога.

Када радите са нумеричким вредностима, можда ћете морати да заокружите ове вредности на фиксну прецизност из разлога као што су:

  • Обезбеђивање доследног формата
  • Лакше складиштење и обрада

У овом водичу ћемо научити различите начине заокруживања броја на одређену прецизност, заокруживања бројева навише и наниже на најближи цео број и још много тога.

Хајде да почнемо.

Како заокружити бројеве користећи уграђену роунд() функцију

Најчешћи метод заокруживања бројева у Питхон-у је коришћење уграђеног роунд() функција. Почнимо тако што ћемо научити његову синтаксу:

round(num, ndigits)

овде,

  • нум је број који желите да заокружите
  • ндигитс је опциони параметар са подразумеваном вредношћу Ништа. То је број места на које треба заокружити број. Ако је ндигитс = 2, број се заокружује на два места после децималног зареза.
  • Функција роунд() враћа број заокружен на ндигитс прецизности након децималног зареза.

Примери употребе функције Питхон роунд().

Хајде да кодирамо неке примере да бисмо разумели како функционише функција роунд().

Као што је поменуто, ндигитс је опционо. Дакле, када позовемо роунд() само са бројем, број се заокружује на најближи цео број.

number = 7.123456
rounded = round(number)  
print(rounded)
# Output: 7

Узмимо сада неколико примера где наводимо прецизност.

Са ндигитс постављеним на 2, број се заокружује на две децимале (десето место):

number = 7.123456
rounded = round(number, 2)  
print(rounded)
# Output: 7.12

Са ндигитс постављеним на 3, број се заокружује на три децимале (стото место):

number = 7.123456
rounded = round(number, 3)  
print(rounded)
# Output: 7.123

Можете користити роунд() и за заокруживање негативних бројева:

number = -3.4
rounded = round(number)
print(rounded) 
# Output: -3

Овде функција заокружује -3,4 на -3, најближи цео број.

  11 ФТП/СФТП клијената које треба знати као сисадмин и програмер

Заокруживање на најближе место десетица и стотина

Да ли сте знали да нцифре такође могу имати негативне вредности?

Да, можете позвати функцију роунд() са негативним вредностима за ндигитс. Када то урадите, заокруживање се дешава лево од децималног зареза уместо десно.

Шта ово значи? Хајде да видимо неке примере.

Када поставимо ндигитс на -1, број се заокружује на најближе десетице.

number = 7.123456
rounded = round(number, -1)  
print(rounded)
# Output: 10.0

А позивање функције роунд() са ндигитс постављеним на -2 заокружује број 77,123456 на најближу стотину, што је у овом случају 100,0.

number = 77.123456
rounded = round(number, -2)  
print(rounded)
# Output: 100.0

Чини се да до сада функција роунд() прати опште принципе заокруживања које смо научили у школској математици. Али то није увек случај.

Постоје неке ограничења са помичним зарезом бројевима. Тако да можете видети неке неочекиване резултате приликом заокруживања. Још једно занимљиво упозорење је банкарово заокруживање.

Шта је банкарско заокруживање?

Покрените Питхон РЕПЛ и испробајте следећи пример:

>>> round(1.5)
2

Видимо да рунда (1.5) враћа 2 (као што се очекивало). Дакле, шта би требало да врати роунд(2.5)?

>>> round(2.5)
2

Занимљиво, да? И рунда (1,5) и рунда (2,5) враћају 2. Али како и зашто?

Интерно, функција заокруживања функционише овако: свака вредност која је на средини између два цела броја се заокружује на најближи паран цео број. Ово се зове банкарско заокруживање или округла половина до изједначења стратегије.

Знамо да је функција роунд() довољна за једноставне задатке заокруживања. Али понекад, можда ћете морати да заокружите навише или наниже број на најближи цео број.

Па како то да урадиш? Хајде да то научимо у следећем одељку.

Како заокружити бројеве у Питхон-у

Да бисте заокружили број на најближи цео број, можете користити:

  Шта је црвена тачка на икони Дисцорд и како да је поправим?

Коришћење матх.цеил

Функција цеил() (или функција плафона) функционише овако: заокружује број на најмањи цео број који је већи од броја.

Следећи исечак показује како да користите функцију цеил() да бисте заокружили број 3.2:

import math

number = 3.2
rounded_up = math.ceil(number)
print(rounded_up)  
# Output: 4

Коришћење децималног модула

До сада смо користили уграђени флоат тип података. Али за одређене примене у научном рачунарству и финансијама потребна нам је много већа прецизност. А за ово, Питхон се испоручује са децималним модулом који обезбеђује:

  • Прецизнија аритметика са покретним зарезом
  • Поуздано тестирање једнакости
  • Финија контрола над нивоом прецизности (подразумевана прецизност је 28 места)

Да бисте видели тренутни контекст, користите гетцонтект() као што је приказано:

from decimal import getcontext
current_context = getcontext()
print(current_context)

Требало би да можете да видите тренутни режим прецизности и заокруживања, између осталог:

# Output
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, 
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

Да бисте заокружили број, можете користити куантизе() тако што ћете навести:

  • Прецизност (0,0 пошто желимо да заокружимо на најближи цео број) и
  • Режим заокруживања: РОУНД_ЦЕИЛИНГ
from decimal import Decimal, ROUND_CEILING

number = Decimal('3.2')
rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(rounded_up)  
# Output: 4

Овде је број 3.2 заокружен на најближи цео број 4.

Како заокружити бројеве у Питхон-у

Сада, да видимо како заокружити бројеве у Питхон-у. Слично процесу заокруживања, можемо користити или математичке или децималне модуле.

Користећи математику.под

Функција флоор() из математичког модула функционише овако: заокружује број на највећи цео број који је мањи од броја.

Узмимо следећи пример:

import math

number = 3.8
rounded_down = math.floor(number)
print(rounded_down)  
# Output: 3

Овде функција флоор() заокружује број са помичним зарезом 3.8 на 3.

Коришћење децималног модула

Да бисте заокружили број наниже, можете користити куантизе() постављањем режима заокруживања на РОУНД_ФЛООР.

from decimal import Decimal, ROUND_FLOOR

number = Decimal('3.8')
rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(rounded_down)  
# Output: 3

Као што се види, 3,8 је заокружено на 3.

Уобичајене замке које треба избегавати приликом заокруживања бројева

Већ смо видели да функција роунд() заокружује половину на пар, што можда није увек пожељно. Постоје неке друге уобичајене замке које треба избегавати приликом заокруживања бројева у Питхон-у:

  • Нетачно поређење једнакости: Заокруживање бројева често доводи до грешке заокруживања. Ако покушате да извршите поређење једнакости између заокруженог резултата са другом вредношћу, провера једнакости ће (скоро увек) бити неуспешна због различите прецизности. Зато покушајте да избегнете проверу једнакости између бројева са помичним зарезом и заокружених бројева. Ако је поређење неопходно, онда уведите праг толеранције.
  • Губитак информација: Можда ћете желети да се одређени подаци, попут очитавања сензора у различитим временским ознакама, ухвате са великом прецизношћу. Заокруживање таквих података на мање децималних места доводи до губитка информација и нетачне анализе.
  • Заокруживање међурезултата: Често ћете имати више корака као део израчунавања. Користите доследну прецизност у свим корацима. Такође, избегавајте заокруживање у средњим корацима да бисте спречили да се грешке заокруживања споје.
  Како да креирате и продате своје Лигхтроом унапред постављене поставке: Ултимативни водич

Најбоље праксе за заокруживање бројева у Питхон-у

Хајде да наведемо неке најбоље праксе које треба следити приликом заокруживања бројева у Питхон-у:

  • Изаберите прави тип података: изаберите између плутајућих и децималних типова података у зависности од апликације. Ако треба да извршите прецизну аритметику са плутајућим зарезом, изаберите децимални тип података.
  • Користите доследне нивое прецизности: Подесите доследне нивое прецизности за децималне бројеве током целог програма да бисте избегли неочекиване грешке заокруживања.
  • Технике заокруживања докумената: У стварним апликацијама које укључују податке као што су валута и очитавања сензора, важно је да постоји доследна и документована техника заокруживања.

Окончање

Хајде да завршимо водич са кратким прегледом онога што смо научили:

  • Можете користити уграђену функцију роунд() са овом синтаксом роунд(нум, ндигитс). Када користите функцију роунд(), требало би да будете свесни банкарове стратегије заокруживања. Дакле, заокружује бројеве тачно између два цела броја на најближи паран цео број.
  • Можете користити функције цеил() и флоор() из математичког модула да заокружите навише и наниже дати број на најближи цео број, респективно.
  • Када треба да извршите аритметику високе прецизности са покретним зарезом, користите децимални модул. Можете заокружити бројеве са потребном прецизношћу и стратегијом заокруживања.
  • Требало би да будете свесни уобичајених замки са заокруживањем бројева у Питхон-у. То укључује губитак информација услед заокруживања, заокруживање резултата у међукорацима и коришћење различите прецизности у различитим деловима кода.
  • Најбоље праксе укључују избор правог типа података у зависности од апликације и документовање доследних нивоа прецизности.

Затим научите како да извршите поделу у Питхон-у.

Да ли је овај чланак био од помоћи?

Хвала на повратним информацијама!