misalnya Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5
subramani
3
Anda benar-benar membutuhkan ini setelah 10 tahun aneh? lol
L_Church
1
mengapa setelah 10 tahun ada karunia? sudah banyak jawaban. apakah ada sesuatu yang saya lewatkan di sini?
Puddle
3
Orang ini hanya bertanya 1 pertanyaan dan meninggalkan situs sejak. Kurasa hanya itu yang selalu ingin dia ketahui ..: D
Nikos
Jawaban:
484
Math.Floorputaran ke bawah, Math.Ceilingputaran ke atas, dan Math.Truncateputaran ke arah nol. Jadi, Math.Truncateseperti Math.Flooruntuk angka positif, dan seperti Math.Ceilinguntuk angka negatif. Inilah rujukannya .
Untuk kelengkapan, Math.Roundputaran ke bilangan bulat terdekat. Jika jumlahnya tepat di tengah-tengah antara dua bilangan bulat, maka itu membulat ke arah genap. Referensi.
@ Chris, saya sarankan Anda memperbaiki deskripsi Anda tentang Round, ada dua cara untuk membulatkan (AwayFromZero dan ToEven) dan tidak membulatkan ke bilangan bulat terdekat karena dapat melakukan pembulatan fraksional juga.
paxdiablo
1
Jadi hanya menambahkan pendek ke pertanyaan awal - apa perbedaan antara Math.Truncate dan hanya casting desimal atau dobel ke int? bukankah itu juga hanya membulat ke nol?
Noam Gal
8
Kapan (int)myDoubleberbeda dari (int)Math.Truncate(myDouble)?
buka
2
Apa (int) sama dengan di kelas Matematika?
Lei Yang
386
Ikuti tautan ini untuk deskripsi MSDN tentang:
Math.Floor, yang membulatkan ke arah infinity negatif.
Math.Ceiling, yang dibulatkan ke arah infinity positif.
Math.Truncate, yang membulatkan ke atas atau ke bawah menuju nol.
Math.Round, yang membulatkan ke bilangan bulat terdekat atau jumlah tempat desimal yang ditentukan. Anda dapat menentukan perilaku jika persis sama antara dua kemungkinan, seperti pembulatan sehingga angka akhir genap (" Round(2.5,MidpointRounding.ToEven)" menjadi 2) atau sehingga jauh dari nol (" Round(2.5,MidpointRounding.AwayFromZero)" menjadi 3).
Diagram dan tabel berikut dapat membantu:
-3-2-10123+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8===========================Floor-3-1012Ceiling-20123Truncate-20012Round(ToEven)-30023Round(AwayFromZero)-3-1023
Perhatikan bahwa Roundjauh lebih kuat daripada yang terlihat, hanya karena dapat membulatkan ke tempat desimal tertentu. Semua yang lain membulatkan ke nol desimal selalu. Sebagai contoh:
n =3.145;
a =System.Math.Round(n,2,MidpointRounding.ToEven);// 3.14
b =System.Math.Round(n,2,MidpointRounding.AwayFromZero);// 3.15
Dengan fungsi-fungsi lain, Anda harus menggunakan tipuan multiply / bagi untuk mendapatkan efek yang sama:
c =System.Math.Truncate(n *100)/100;// 3.14
d =System.Math.Ceiling(n *100)/100;// 3.15
Pax, saya pikir Anda memiliki kesalahan dengan: Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0,3, MidpointRounding.AwayFromZero) == 0,0 dll ..
dtroy
1
Terima kasih, @droy, saya tidak pernah perlu menggunakan mode itu dan, sementara saya mendokumentasikannya dengan benar jika teksnya, saya benar-benar mendapatkan contoh yang salah. Semoga itu diperbaiki sekarang.
paxdiablo
Maaf mengomentari pertanyaan lama seperti itu tetapi saya harus bertanya: Bagaimana Anda bisa memutari "ToEven" menjadi dua tempat desimal? Tentunya aneh dan bahkan hanya berlaku untuk bilangan bulat?
Richiban
4
@Richiban, anggap evensebagai properti digit terakhir dalam angka bulat, bukan berarti seluruh angka harus kelipatan dua. Omong-omong, maaf butuh waktu lama untuk kembali kepada Anda, harap Anda tidak hanya duduk menunggu jawaban saya :-)
paxdiablo
62
Math.Floor() putaran menuju infinity negatif
Math.Truncate membulatkan ke atas atau ke bawah menuju nol.
Math.floorsliiiide ke kiri ... Math.ceilsliiiide ke kanan ... Math.truncatecriiiiss crooooss (lantai / langit-langit selalu mengarah ke 0) Math.roundcha cha, benar-benar mulus ... (pergi ke sisi terdekat)
Ayo berangkat kerja! (⌐ □ _ □)
Ke kiri ... Math.floor
Ambil kembali sekarang, kamu semua ... --
Dua hop kali ini ...-=2
Semua orang bertepuk tangan ✋✋
Seberapa rendah Anda bisa pergi? Bisakah kamu turun rendah? Sepanjang jalan menuju floor?
if(this=="wrong")return"i don't wanna be right";
Math.truncate(x)juga sama dengan int(x).
dengan menghapus pecahan positif atau negatif, Anda selalu menuju ke 0.
Jawaban:
Math.Floor
putaran ke bawah,Math.Ceiling
putaran ke atas, danMath.Truncate
putaran ke arah nol. Jadi,Math.Truncate
sepertiMath.Floor
untuk angka positif, dan sepertiMath.Ceiling
untuk angka negatif. Inilah rujukannya .Untuk kelengkapan,
Math.Round
putaran ke bilangan bulat terdekat. Jika jumlahnya tepat di tengah-tengah antara dua bilangan bulat, maka itu membulat ke arah genap. Referensi.Lihat juga: jawaban Pax Diablo . Sangat dianjurkan!
sumber
(int)myDouble
berbeda dari(int)Math.Truncate(myDouble)
?Ikuti tautan ini untuk deskripsi MSDN tentang:
Math.Floor
, yang membulatkan ke arah infinity negatif.Math.Ceiling
, yang dibulatkan ke arah infinity positif.Math.Truncate
, yang membulatkan ke atas atau ke bawah menuju nol.Math.Round
, yang membulatkan ke bilangan bulat terdekat atau jumlah tempat desimal yang ditentukan. Anda dapat menentukan perilaku jika persis sama antara dua kemungkinan, seperti pembulatan sehingga angka akhir genap ("Round(2.5,MidpointRounding.ToEven)
" menjadi 2) atau sehingga jauh dari nol ("Round(2.5,MidpointRounding.AwayFromZero)
" menjadi 3).Diagram dan tabel berikut dapat membantu:
Perhatikan bahwa
Round
jauh lebih kuat daripada yang terlihat, hanya karena dapat membulatkan ke tempat desimal tertentu. Semua yang lain membulatkan ke nol desimal selalu. Sebagai contoh:Dengan fungsi-fungsi lain, Anda harus menggunakan tipuan multiply / bagi untuk mendapatkan efek yang sama:
sumber
even
sebagai properti digit terakhir dalam angka bulat, bukan berarti seluruh angka harus kelipatan dua. Omong-omong, maaf butuh waktu lama untuk kembali kepada Anda, harap Anda tidak hanya duduk menunggu jawaban saya :-)Math.Floor()
putaran menuju infinity negatifMath.Truncate
membulatkan ke atas atau ke bawah menuju nol.Sebagai contoh:
sementara
sumber
Beberapa contoh:
sumber
Math.floor
sliiiide ke kiri ...Math.ceil
sliiiide ke kanan ...Math.truncate
criiiiss crooooss (lantai / langit-langit selalu mengarah ke 0)Math.round
cha cha, benar-benar mulus ... (pergi ke sisi terdekat)Ayo berangkat kerja! (⌐ □ _ □)
Ke kiri ...
Math.floor
Ambil kembali sekarang, kamu semua ...
--
Dua hop kali ini ...
-=2
Semua orang bertepuk tangan ✋✋
Seberapa rendah Anda bisa pergi? Bisakah kamu turun rendah? Sepanjang jalan menuju
floor
?Math.truncate(x)
juga sama denganint(x)
.dengan menghapus pecahan positif atau negatif, Anda selalu menuju ke 0.
sumber
Mereka secara fungsional setara dengan angka positif. Perbedaannya terletak pada bagaimana mereka menangani angka negatif.
Sebagai contoh:
Tautan MSDN: - Metode Math.Lantai - Metode Math.Truncate
PS Waspadalah terhadap Matematika. Mungkin tidak seperti yang Anda harapkan.
Untuk mendapatkan hasil pembulatan "standar" gunakan:
sumber
Coba ini, Contoh:
Math.Floor () vs Math.Truncate ()
Juga Math.Round ()
math.floor()
Mengembalikan bilangan bulat terbesar kurang dari atau sama dengan angka yang ditentukan. MSDN system.math.floor
math.truncate()
Menghitung bagian integral dari angka. MSDN system.math.truncate
sumber
Math.Floor()
putaran "menuju infinity negatif" sesuai dengan Standar IEEE 754 bagian 4.Math.Truncate()
putaran "ke bilangan bulat terdekat menuju nol."sumber
Math.Floor()
: Mengembalikan bilangan bulat terbesar kurang dari atau sama dengan angka floating-point presisi ganda.Math.Round()
: Membulatkan nilai ke bilangan bulat terdekat atau ke jumlah digit pecahan yang ditentukan.sumber
Floor()
danTruncate()
, bukanFloor()
danRound()
.Math.floor()
akan selalu dibulatkan mis., mengembalikan integer LEBIH. Sementararound()
akan mengembalikan integer TERDEKATmath.floor ()
Mengembalikan bilangan bulat terbesar kurang dari atau sama dengan angka yang ditentukan.
math.truncate ()
Menghitung bagian integral dari angka.
sumber
Potong memotong desimal ****
sumber