Python: Pag-round at Katumpakan gamit ang round() at decimal

1. Pangunahing gamit ng function na round() ng Python

Pangkalahatang-ideya ng function na round()

Ang function na round() ng Python ay isang pangunahing function para i-round off ang mga numero. Pangunahing ginagamit ito upang tukuyin ang bilang ng mga decimal place at i-round ang mga numero. Sa ganitong paraan, maaaring mapadali ang pagpapakita ng data at pag-aayos ng mga resulta ng kalkulasyon.

Pangunahing syntax

round(number[, ndigits])
  • number: Ang numerong i-round.
  • ndigits: Bilang ng mga decimal place (opsyonal). Kung hindi ibibigay, i-round sa integer.

Halimbawa ng paggamit

print(round(3.14159))    # Resulta: 3
print(round(3.14159, 2)) # Resulta: 3.14
print(round(1.5))        # Resulta: 2
Sa ganitong paraan, ang function na round() ay maaaring i-round ayon sa tinukoy na bilang ng mga decimal place, at kung hindi ibibigay ang ndigits, i-round ito sa integer.

2. Paraan ng Pag-ikot ng Python: “Banker’s Rounding”

Ano ang Banker’s Rounding?

Ang round() ng Python ay gumagamit ng tinatawag na “Banker’s Rounding”. Ito ay paraan ng pag-round sa pinakamalapit na pares na numero kapag ang decimal ay 0.5. Halimbawa, ang 2.5 ay i-round sa 2, at ang 3.5 ay i-round sa 4. Ginagamit ang pamamaraang ito sa estadistika at pinansyal na kalkulasyon upang maiwasan ang bias sa data.

Halimbawa ng Banker’s Rounding

print(round(2.5))  # resulta: 2
print(round(3.5))  # resulta: 4
Sa ganitong paraan, ang Banker’s Rounding ay nagra-round sa pares na numero kapag ang decimal ay 0.5, kaya napipigilan ang pag-accumulate ng error.

Mga Benepisyo ng Banker’s Rounding

Ang pamamaraang ito ay makakabawas ng pag-accumulate ng error na dulot ng simpleng pag-round up o down. Lalo na kapag nagpoproseso ng malaking dami ng data, nakakatulong ito upang mapanatili ang balanse ng kabuuang data.
年収訴求

3. Mga Problema sa Floating-Point Numbers

Internal na Representasyon at Pagkakamali ng Floating-Point Numbers

Sa Python, ang mga floating-point number ay kinakatawan sa binary. Dahil dito, maaaring hindi eksaktong maipakita ang mga decimal na numero, at maaaring makakuha ng hindi inaasahang resulta sa pag-round. Lalo na kapag ang numero ay hindi maaaring maipakita nang eksakto sa loob, ang resulta ng function na round() ay maaaring hindi ayon sa inaasahan.

Halimbawa ng mga Problema sa Floating-Point Numbers

n = 3.15
print(round(n, 1))  # Resulta: 3.1 (Inaasahan ay 3.2)
Sa halimbawang ito, ang 3.15 ay kinakatawan sa loob bilang 3.149999..., kaya hindi nakukuha ang inaasahang resulta. Ito ay dahil sa limitasyon ng floating-point numbers.

Mga Dahilan kung Bakit Nagkakaroon ng Error ang Floating-Point Numbers

Ang floating-point numbers ay kinakatawan sa binary, kaya ang mga numerong tulad ng 1.15 at 3.15 ay hindi maaaring maipakita nang eksakto. Dahil dito, nagkakaroon ng error kapag nagra-round. Upang maiwasan ang problemang ito, inirerekomenda na gumamit ng mataas na precision na pagproseso ng numero tulad ng decimal module na ipapaliwanag sa susunod.

4. Para mapanatili ang katumpakan ng decimal na module

Pangkalahatang-ideya ng decimal na module

Sa pamamagitan ng paggamit ng decimal na module, maiiwasan ang mga error ng floating-point at makakagawa ng mga kalkulasyong may mataas na katumpakan. Lalo na ito ay kapaki-pakinabang kapag kinakailangan ang tumpak na resulta sa mga pinansyal na kalkulasyon o siyentipikong kalkulasyon.

Halimbawa ng paggamit

from decimal import Decimal, ROUND_HALF_UP
n = Decimal('3.15')
print(n.quantize(Decimal('0.1'), rounding=ROUND_HALF_UP))  # Result: 3.2
Ginagamit ang klase na Decimal upang maiwasan ang mga error ng floating-point at magsagawa ng mga kalkulasyong may mataas na katumpakan. Ang ROUND_HALF_UP ay gumagana katulad ng karaniwang pag-ikot.

Iba pang mga mode ng pag-ikot

decimal na module ay may iba’t ibang mga mode ng pag-ikot. Halimbawa:
  • ROUND_DOWN: Laging pinaputol pababa.
  • ROUND_CEILING: Ang mga positibong numero ay pinapataas, ang mga negatibong numero ay pinaputol pababa.
  • ROUND_FLOOR: Laging nagro-round pababa (kasama ang mga negatibong numero).
Sa paggamit ng mga mode na ito, posible ang flexible na pag-ikot ayon sa pangangailangan.
侍エンジニア塾

5. Ibang mga paraan ng pag-ikot: math.floor() at math.ceil()

math.floor(): Pagpuputol

math.floor() ay isang function na nagtatanggal ng mga decimal at nagro-round sa pinakamalapit na integer. Sa mga negatibong numero, ito ay nagro-round pababa.
import math
print(math.floor(3.9))  # Resulta: 3

math.ceil(): Pag-angat

Samantala, math.ceil() ay isang function na palaging nagra-round pataas ng mga decimal.
import math
print(math.ceil(3.1))   # Resulta: 4

Pagkakaiba sa round()

round() ay nagro-round sa pinakamalapit na integer, samantalang ang math.floor() at math.ceil() ay palaging nagro-round sa isang direksyon, kaya mas madaling hulaan ang resulta. Kung kailangan ng eksaktong pag-round para sa mga negatibong numero, epektibo ang mga function na ito.

6. Praktikal na Mga Halimbawa ng Pag-aaplay

Pag-aaplay sa Pagkalkula ng Pera

Sa pagkalkula ng pera, kinakailangan ang mataas na katumpakan. Halimbawa, kung gagamitin ang decimal na module para sa pagkalkula ng kabuuang halaga o diskwento, makakakuha ng eksaktong halaga.
from decimal import Decimal, ROUND_HALF_UP
price = Decimal('19.995')
print(price.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))  # Resulta: 20.00

Pag-aaplay sa Siyentipikong Kalkulasyon

Sa siyentipikong kalkulasyon, nagiging problema ang error ng floating-point numbers, kaya mahalaga ang paggamit ng decimal na module para sa eksaktong kalkulasyon. Nakakatulong ito upang mapanatili ang katumpakan ng mga resulta ng pagsukat at datos ng eksperimento.

Pag-aaplay sa Data Analysis

Sa data analysis, kailangan ding i-round nang tama ang mga numero upang hindi mag-ipon ang error. Sa pag-aggregate ng estadistikal na datos o malalaking datos, ang tamang paggamit ng decimal at round() ay makakakuha ng eksaktong resulta.

7. Buod

Ang round() function ng Python ay isang maginhawang tool para madaling i-round ang mga decimal, ngunit kailangan mag-ingat lalo na sa mga error ng floating-point numbers. Sa mga sitwasyon kung saan kinakailangan ang pinansyal na kalkulasyon o siyentipikong katumpakan, mahalagang gamitin ang decimal module upang mapataas ang precision ng pag-round. Bukod dito, mahalagang maunawaan ang iba pang mga paraan ng pag-round tulad ng math.floor() at math.ceil(), at gamitin ang mga ito ayon sa pangangailangan upang magkaroon ng flexible na pagproseso ng mga numero.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール