Saya baru saja membaca kembali What's New In Python 3.0 dan menyatakan:
Putaran () fungsi strategi pembulatan dan tipe pengembalian telah berubah. Kasus setengah jalan yang tepat sekarang dibulatkan ke hasil genap terdekat bukannya menjauh dari nol. (Misalnya, babak (2.5) sekarang mengembalikan 2 daripada 3.)
dan dokumentasi untuk putaran :
Untuk jenis bawaan yang mendukung putaran (), nilai dibulatkan ke kelipatan terdekat dari 10 dengan daya minus n; jika dua kelipatan sama-sama dekat, pembulatan dilakukan menuju pilihan genap
Jadi, di bawah v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
seperti yang saya harapkan. Namun, sekarang di bawah v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Ini tampaknya kontra-intuitif dan bertentangan dengan apa yang saya pahami tentang pembulatan (dan pasti akan membuat orang tersandung). Bahasa Inggris bukan bahasa ibu saya tetapi sampai saya membaca ini saya pikir saya tahu apa arti pembulatan: - / Saya yakin pada saat v3 diperkenalkan pasti ada beberapa diskusi tentang ini, tetapi saya tidak dapat menemukan alasan yang baik dalam pencarian saya.
- Adakah yang tahu mengapa ini diubah?
- Apakah ada bahasa pemrograman utama lainnya (misalnya, C, C ++, Java, Perl, ..) yang melakukan pembulatan semacam ini (bagi saya tidak konsisten)?
Apa yang kulewatkan di sini?
UPDATE: @ Li-aungYip berkomentar tentang "Pembulatan Banker" memberi saya istilah pencarian / kata kunci yang tepat untuk mencari dan saya menemukan pertanyaan SO ini: Mengapa. NET menggunakan pembulatan bankir sebagai default? , jadi saya akan membacanya dengan cermat.