Kenapa membagi dua angka int 32 bit karena (int / int) kembali kepada saya 0
, tetapi jika saya menggunakan Decimal.Divide()
saya mendapatkan jawaban yang benar? Aku sama sekali bukan cowok #
Kenapa membagi dua angka int 32 bit karena (int / int) kembali kepada saya 0
, tetapi jika saya menggunakan Decimal.Divide()
saya mendapatkan jawaban yang benar? Aku sama sekali bukan cowok #
Jawaban:
int
adalah tipe integer; membagi dua int melakukan pembagian integer , yaitu bagian pecahan dipotong karena tidak dapat disimpan dalam tipe hasil (juga int
!). Decimal
, sebaliknya, memiliki bagian pecahan. Dengan memanggil Decimal.Divide
, int
argumen Anda secara implisit diubah menjadi Decimal
s.
Anda dapat menerapkan pembagian non-integer pada int
argumen dengan secara eksplisit mentransmisikan setidaknya satu argumen ke tipe floating-point, misalnya:
int a = 42;
int b = 23;
double result = (double)a / b;
Dalam kasus pertama, Anda melakukan pembagian bilangan bulat, sehingga hasilnya terpotong (bagian desimal dipotong) dan bilangan bulat dikembalikan.
Dalam kasus kedua, int diubah menjadi desimal terlebih dahulu, dan hasilnya adalah desimal. Karenanya mereka tidak terpotong dan Anda mendapatkan hasil yang benar.
Baris berikut:
int a = 1, b = 2;
object result = a / b;
... akan dilakukan dengan menggunakan aritmatika integer . Decimal.Divide
di sisi lain mengambil dua parameter tipe Decimal
, sehingga pembagian akan dilakukan pada nilai desimal daripada nilai integer. Itu setara dengan ini:
int a = 1, b = 2;
object result = (Decimal)a / (Decimal)b;
Untuk memeriksanya, Anda dapat menambahkan baris kode berikut setelah masing-masing contoh di atas:
Console.WriteLine(result.ToString());
Console.WriteLine(result.GetType().ToString());
Output dalam kasus pertama adalah
0
System.Int32
..dan dalam kasus kedua:
0,5
System.Decimal
Anda ingin memasukkan angka:
ganda c = (ganda) a / (ganda) b;
Catatan: Jika salah satu argumen di C # adalah ganda, pembagian ganda digunakan yang menghasilkan ganda. Jadi, berikut ini juga akan berhasil:
ganda c = (ganda) a / b;
berikut adalah Program Kecil:
static void Main(string[] args)
{
int a=0, b = 0, c = 0;
int n = Convert.ToInt16(Console.ReadLine());
string[] arr_temp = Console.ReadLine().Split(' ');
int[] arr = Array.ConvertAll(arr_temp, Int32.Parse);
foreach (int i in arr)
{
if (i > 0) a++;
else if (i < 0) b++;
else c++;
}
Console.WriteLine("{0}", (double)a / n);
Console.WriteLine("{0}", (double)b / n);
Console.WriteLine("{0}", (double)c / n);
Console.ReadKey();
}
Dalam kasus saya tidak ada yang berhasil di atas.
yang ingin saya lakukan adalah membagi 278 dengan 575 dan mengalikan dengan 100 untuk menemukan persentase.
double p = (double)((PeopleCount * 1.0 / AllPeopleCount * 1.0) * 100.0);
%: 48,3478260869565 -> 278/575 ---> 0%: 51,6521739130435 -> 297/575 ---> 0
jika saya mengalikan PeopleCount dengan 1.0 itu membuatnya menjadi desimal dan pembagian akan menjadi 48.34 ... juga kalikan dengan 100.0 bukan 100.
Jawaban yang ditandai seperti itu hampir selesai, tetapi saya pikir perlu ditambahkan bahwa ada perbedaan antara penggunaan ganda dan desimal.
Saya tidak akan menjelaskan konsepnya dengan lebih baik daripada Wikipedia, jadi saya hanya akan memberikan petunjuknya:
Dalam sistem keuangan, sering kali merupakan persyaratan bahwa kami dapat menjamin akurasi tempat desimal dalam jumlah tertentu (basis 10). Ini umumnya tidak mungkin jika input / data sumber dalam basis 10 tetapi kami melakukan aritmatika dalam basis 2 (karena jumlah tempat desimal yang diperlukan untuk perluasan desimal suatu angka bergantung pada basis; sepertiga membutuhkan banyak desimal yang tak terhingga tempat untuk mengekspresikan dalam basis 10 sebagai 0,333333 ..., tetapi hanya membutuhkan satu desimal dalam basis-3: 0,1).
Angka floating-point lebih cepat untuk digunakan (dalam hal waktu CPU; dari segi pemrograman, angka tersebut sama-sama sederhana) dan lebih disukai kapan pun Anda ingin meminimalkan kesalahan pembulatan (seperti dalam aplikasi ilmiah).