Bagaimana Anda mengonversi dobel menjadi int terdekat?
147
Gunakan Math.round()
, mungkin dalam hubungannya denganMidpointRounding.AwayFromZero
misalnya:
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
Convert.ToInt32()
melakukan hal yang sama, atau hanya menghapus semua setelah desimal?Referensi
Menangani pembulatan seperti ini:
sumber
Math.Round
karena mengembalikan int yang diperlukan.[0,.5)
- turun dan tepat setengah angka -[.5,1)
- naik. Membulatkan ke angka yang bahkan sedikit bias, karena(.5,1.5)
[1.5,2.5]
Anda juga dapat menggunakan fungsi:
Tergantung pada arsitekturnya beberapa kali lebih cepat.
sumber
sumber
Saya tahu pertanyaan ini sudah lama, tetapi saya menemukannya dalam pencarian saya untuk jawaban atas pertanyaan serupa. Saya pikir saya akan membagikan tip yang sangat berguna yang telah diberikan kepada saya.
Saat mengonversi ke int, cukup tambahkan
.5
nilai Anda sebelum mengunduh. Karena downcastingint
selalu turun ke angka yang lebih rendah (misalnya(int)1.7 == 1
), jika nomor Anda.5
atau lebih tinggi, menambahkan.5
akan membawanya ke nomor berikutnya dan downcast Andaint
harus mengembalikan nilai yang benar. (mis.(int)(1.8 + .5) == 2
)sumber
+ 0.5 * Math.Abs(d)
Metode di jawaban lain melempar
OverflowException
jika nilai float di luar kisaran Int. https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_sumber
Untuk Unity, gunakan Mathf.RoundToInt .
Sumber
sumber
Saya sedang mengembangkan kalkulator ilmiah yang menampilkan tombol Int. Saya telah menemukan yang berikut ini adalah solusi sederhana dan andal:
Math.Round kadang-kadang menghasilkan hasil yang tidak terduga atau tidak diinginkan, dan konversi eksplisit ke integer (melalui gips atau Convert.ToInt ...) sering menghasilkan nilai yang salah untuk angka presisi yang lebih tinggi. Metode di atas tampaknya selalu berhasil.
sumber