Laporan keuangan, tampilan antarmuka, dan pra-pemrosesan data sering menuntut angka yang dibulatkan. NumPy menyediakan beberapa fungsi pembulatan dengan aturan yang berbeda: np.round dan np.rint memakai aturan round half to even, sedangkan np.fix memotong menuju nol. Memahami perbedaan aturan ini penting karena hasilnya bisa berbeda dari pembulatan yang diajarkan di sekolah.

Ringkasan singkat sebelum masuk ke detail:

  • np.round(a, decimals) — pembulatan banker’s rounding ke sejumlah desimal.
  • np.rint(a) — aturan sama dengan np.round, tetapi selalu menghasilkan dtype float.
  • np.fix(a) — memotong bagian pecahan, mengarah ke nol.

round dan Aturan Banker’s Rounding #

np.round membulatkan nilai yang tepat berada di tengah (0.5, 2.5, dan seterusnya) ke bilangan genap terdekat, bukan selalu ke atas. Aturan ini dikenal sebagai banker’s rounding:

python
import numpy as np

nilai = np.array([0.5, 1.5, 2.5, 3.5, 4.5])
print(np.round(nilai))
print(np.round(-2.5))

Output yang Dihasilkan:

text
[0. 2. 2. 4. 4.]
-2.0

Bandingkan dengan aturan sekolah (“0,5 ke atas dibulatkan”) yang akan memberi [1, 2, 3, 4, 5]:

Nilainp.round (banker’s)Aturan sekolah (half up)
0.501
1.522
2.523
3.544
4.545

Bagian tengahnya tetap bekerja seperti biasa: nilai yang jaraknya tidak sama ke dua bilangan bulat (misal 3.7) dibulatkan ke tetangga terdekat, menghasilkan 4.0.

Parameter decimals: Dari Desimal hingga Ratusan #

Argumen kedua np.round(a, decimals) menentukan posisi pembulatan. Nilai positif membulatkan di belakang koma; nilai negatif membulatkan ke puluhan, ratusan, dan seterusnya:

python
import numpy as np

x = np.array([3.14159, 27.1828, 0.41421])
print(np.round(x, 2))
besar = np.array([1337.5, 2450.0, 2718.28])
print(np.round(besar, -2))

Output yang Dihasilkan:

text
[ 3.14 27.18  0.41]
[1300. 2400. 2700.]

Perhatikan baris kedua: 2450.0 dengan decimals=-2 menghasilkan 2400.0, bukan 2500.0, karena 24.5 dibulatkan dengan aturan banker’s menjadi 24 (genap). Nilai 1337.5 justru menjadi 1338.0 karena tetangga genapnya berada di atas. Dengan demikian, aturan banker’s tetap berlaku di semua tingkat decimals.

rint dan fix #

np.rint menerapkan aturan banker’s yang sama dengan np.round tanpa argumen decimals, tetapi keluarannya selalu bertipe float — bahkan ketika inputnya array integer. np.fix berbeda arah: fungsi ini memotong menuju nol, sehingga 1.9 menjadi 1.0 dan -1.9 menjadi -1.0:

python
import numpy as np

x = np.array([1.5, 2.5, -2.5, 3.7])
print(np.rint(x))
print(np.rint(x).dtype)
print(np.fix(x))
print(np.fix(x).dtype)

Output yang Dihasilkan:

text
[ 2.  2. -2.  4.]
float64
[ 1.  2. -2.  3.]
float64

Tabel berikut merangkum ketiga fungsi pada nilai kunci:

FungsiArah2.5-2.53.7-3.7
np.roundhalf to even2.0-2.04.0-4.0
np.rinthalf to even (output float)2.0-2.04.0-4.0
np.fixmenuju nol (truncation)2.0-2.03.0-3.0

Perbedaan np.round dan np.fix hanya terlihat pada nilai non-tengah: np.round(-3.7) pergi ke -4.0 (tetangga terdekat), sedangkan np.fix(-3.7) berhenti di -3.0. Untuk arah pembulatan ke bawah dan ke atas yang konsisten pada bilangan negatif, kita butuh np.floor dan np.ceil yang dibahas pada bab berikutnya, floor, ceil, dan modf.