Silakan merujuk Masalah dengan Divisi Integer untuk alasan memperkenalkan //operator untuk melakukan divisi integer.
Sriram
Jawaban:
651
Dalam Python 3.x, 5 / 2akan kembali 2.5dan 5 // 2akan kembali 2. Yang pertama adalah divisi floating point, dan yang terakhir adalah divisi lantai , kadang-kadang juga disebut divisi integer .
Dalam Python 2.2 atau lebih baru di baris 2.x, tidak ada perbedaan untuk bilangan bulat kecuali Anda melakukan from __future__ import division, yang menyebabkan Python 2.x untuk mengadopsi perilaku 3.x.
Terlepas dari impor di masa depan, 5.0 // 2akan kembali 2.0karena itulah hasil pembagian lantai operasi.
Ini jawaban yang bagus. Tautan PEP sangat membantu. Juga, pertimbangkan untuk menggunakan math.floor()atau math.fmod()jika Anda tidak yakin apa yang terjadi dengan operator unary.
Scott Lowrey
/dan //operator dua arah (dua operan, kiri dan kanan, pembilang dan penyebut)
iono
28
/ -> Divisi titik mengambang
// -> Divisi lantai
Mari kita lihat beberapa contoh di kedua python 2.7 dan di Python 3.5.
Bagaimana dengan ketika angkanya negatif? Apakah perilaku sama untuk bilangan bulat negatif?
Aaron Franke
1
Re: Negatif - Perilaku adalah sama, tetapi ingat bahwa hasilnya adalah lantai, jadi pembulatan selalu turun ke arah yang lebih negatif . Beberapa contoh: -100 // 33=> -4 ; 100 // -33=> -4 ; tetapi karena arah pembulatan func lantai, yang berikutnya bisa tampak kontra-intuitif jika dibandingkan dengan sebelumnya: -100 // -33=> 3 .
Erdős-Bacon
22
Seperti yang semua orang sudah jawab, //adalah pembagian lantai.
Mengapa ini penting adalah bahwa //pembagian lantai jelas, di semua versi Python dari 2.2, termasuk versi Python 3.x.
Tidak menyadari bahwa pembagian lantai bekerja dengan non-integer juga. Terima kasih!
Mike
5
Python 2.7 dan versi python yang akan datang:
Divisi ( /)
Membagi operan tangan kiri dengan operan tangan kanan
Contoh: 4 / 2 = 2
Divisi Lantai ( //)
Pembagian operan di mana hasilnya adalah hasil bagi di mana digit setelah titik desimal dihapus. Tetapi jika salah satu operan negatif, hasilnya adalah lantai, yaitu dibulatkan dari nol (menuju infinity negatif):
Menuju keabadian dan menjauh dari nol adalah hal yang berbeda. Contoh untuk (-1.2 dan 3.4): "lantai" mengarah ke infinity negatif (-2 dan 3), "memotong" menuju nol (-1 dan 3), "jenuh" jauh dari nol (-2 dan 4), dan "langit-langit" mengarah ke infinity positif (-1 dan 4).
Jawaban di atas bagus. Saya ingin menambahkan poin lain. Hingga beberapa nilai keduanya menghasilkan hasil bagi yang sama. Setelah itu operator divisi lantai ( //) berfungsi dengan baik tetapi tidak /operator divisi ( ).
Bagaimana jawaban ini menambahkan sesuatu yang tidak dicakup oleh gagasan lain? Atau bagaimana jawaban ini lebih baik dalam cara apa pun daripada jawaban lainnya?
Rory Daulton
2
Berikut ini adalah output dari suatu program. Itu tidak menjelaskan apa-apa.
//
operator untuk melakukan divisi integer.Jawaban:
Dalam Python 3.x,
5 / 2
akan kembali2.5
dan5 // 2
akan kembali2
. Yang pertama adalah divisi floating point, dan yang terakhir adalah divisi lantai , kadang-kadang juga disebut divisi integer .Dalam Python 2.2 atau lebih baru di baris 2.x, tidak ada perbedaan untuk bilangan bulat kecuali Anda melakukan
from __future__ import division
, yang menyebabkan Python 2.x untuk mengadopsi perilaku 3.x.Terlepas dari impor di masa depan,
5.0 // 2
akan kembali2.0
karena itulah hasil pembagian lantai operasi.Anda dapat menemukan deskripsi terperinci di https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
sumber
python -Qnew
. opsi divisi lainnya:-Qold
(default)-Qwarn
,,-Qwarnall
5.0 / 2
kembali2.5
di semua versi, seperti halnya5 / 2.0
- perilaku lama hanya berbeda ketika kedua operanint
.Python 2.x Klarifikasi:
Untuk memperjelas garis Python 2.x,
/
bukan pembagian lantai atau pembagian sejati. Jawaban yang diterima saat ini tidak jelas tentang ini./
adalah pembagian lantai ketika kedua args beradaint
, tetapi adalah pembagian yang benar ketika salah satu atau kedua argumen tersebut beradafloat
.Di atas mengatakan lebih banyak kebenaran, dan lebih jelas daripada paragraf 2 dalam jawaban yang diterima.
sumber
//
mengimplementasikan "pembagian lantai", terlepas dari tipe Anda. Jadi1.0/2.0
akan memberi0.5
, tetapi keduanya1/2
,1//2
dan1.0//2.0
akan memberi0
.Lihat https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator untuk detail
sumber
math.floor()
ataumath.fmod()
jika Anda tidak yakin apa yang terjadi dengan operator unary./
dan//
operator dua arah (dua operan, kiri dan kanan, pembilang dan penyebut)/ -> Divisi titik mengambang
// -> Divisi lantai
Mari kita lihat beberapa contoh di kedua python 2.7 dan di Python 3.5.
Python 2.7.10 vs Python 3.5
Python 2.7.10 vs Python 3.5
Sekarang jika Anda ingin memiliki (sama dengan python 2.7) keluaran yang sama seperti pada python 3.5, Anda dapat melakukan hal berikut:
Python 2.7.10
Dimana tidak ada perbedaan antara pembagian Lantai di kedua python 2.7 dan di Python 3.5
sumber
-100 // 33
=> -4 ;100 // -33
=> -4 ; tetapi karena arah pembulatan func lantai, yang berikutnya bisa tampak kontra-intuitif jika dibandingkan dengan sebelumnya:-100 // -33
=> 3 .Seperti yang semua orang sudah jawab,
//
adalah pembagian lantai.Mengapa ini penting adalah bahwa
//
pembagian lantai jelas, di semua versi Python dari 2.2, termasuk versi Python 3.x.Perilaku
/
dapat berubah tergantung pada:__future__
Impor aktif atau tidak (modul-lokal)-Q old
atau-Q new
sumber
sumber
Python 2.7 dan versi python yang akan datang:
/
)Membagi operan tangan kiri dengan operan tangan kanan
Contoh:
4 / 2 = 2
//
)Pembagian operan di mana hasilnya adalah hasil bagi di mana digit setelah titik desimal dihapus. Tetapi jika salah satu operan negatif, hasilnya adalah lantai, yaitu dibulatkan dari nol (menuju infinity negatif):
Contoh:
9//2 = 4
dan9.0//2.0 = 4.0
,-11//3 = -4
,-11.0//3 = -4.0
Kedua
/
Divisi dan//
lantai divisi operator yang beroperasi di cara yang sama.sumber
Garis miring ganda
//
,, adalah pembagian lantai:sumber
//
adalah pembagian lantai, itu akan selalu memberi Anda bilangan bulat dari hasilnya. Yang lainnya adalah divisi 'reguler'.sumber
Jawaban persamaan dibulatkan ke bilangan bulat kecil berikutnya atau mengapung dengan 0,0 sebagai titik desimal.
sumber
Jawaban di atas bagus. Saya ingin menambahkan poin lain. Hingga beberapa nilai keduanya menghasilkan hasil bagi yang sama. Setelah itu operator divisi lantai (
//
) berfungsi dengan baik tetapi tidak/
operator divisi ( ).sumber
5.0//2
menghasilkan2.0
, dan bukan2
karena tipe pengembalian nilai pengembalian dari//
operator mengikuti aturan pemaksaan python (tipe casting).Python mempromosikan konversi tipe data yang lebih rendah (integer) ke tipe data yang lebih tinggi (float) untuk menghindari kehilangan data.
sumber
//
adalah pembagian lantai, itu akan selalu memberi Anda nilai dasar dari hasilnya./
adalah divisi floating-point.Berikut ini adalah perbedaan antara
/
dan//
; Saya telah menjalankan operasi aritmatika ini dengan Python 3.7.2sumber