Apa perbedaan antara Math.Floor()
dan Math.Truncate()
. NET?
Apa perbedaan antara Math.Floor()
dan Math.Truncate()
. NET?
Jawaban:
Math.Floor
putaran ke bawah, Math.Ceiling
putaran ke atas, dan Math.Truncate
putaran ke arah nol. Jadi, Math.Truncate
seperti Math.Floor
untuk angka positif, dan seperti Math.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!
(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:
-3 -2 -1 0 1 2 3
+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8
====== ====== ===== ===== =====
Floor -3 -1 0 1 2
Ceiling -2 0 1 2 3
Truncate -2 0 0 1 2
Round (ToEven) -3 0 0 2 3
Round (AwayFromZero) -3 -1 0 2 3
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:
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
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 negatif
Math.Truncate
membulatkan ke atas atau ke bawah menuju nol.
Sebagai contoh:
Math.Floor(-3.4) = -4
Math.Truncate(-3.4) = -3
sementara
Math.Floor(3.4) = 3
Math.Truncate(3.4) = 3
Beberapa contoh:
Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7
Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1
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
?
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.
Mereka secara fungsional setara dengan angka positif. Perbedaannya terletak pada bagaimana mereka menangani angka negatif.
Sebagai contoh:
Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2
Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2
Tautan MSDN: - Metode Math.Lantai - Metode Math.Truncate
PS Waspadalah terhadap Matematika. Mungkin tidak seperti yang Anda harapkan.
Untuk mendapatkan hasil pembulatan "standar" gunakan:
float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5
Coba ini, Contoh:
Math.Floor () vs Math.Truncate ()
Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4
Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3
Juga Math.Round ()
Math.Round(1.6) = 2
Math.Round(-8.56) = -9
Math.Round(8.16) = 8
Math.Round(8.50) = 8
Math.Round(8.51) = 9
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
Math.Floor()
putaran "menuju infinity negatif" sesuai dengan Standar IEEE 754 bagian 4.
Math.Truncate()
putaran "ke bilangan bulat terdekat menuju nol."
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.
Floor()
dan Truncate()
, bukan Floor()
dan Round()
.
Potong memotong desimal ****