Friday, September 09, 2011

Trik Pembulatan Ke Atas di C#

C# ternyata memiliki error yang konyol(kalau menurut kita orang Indonesia, mungkin tidak bagi orang Amerika). Jika kita punya nilai 62.5 lalu kita rounding menggunakan Math.Round(62.5,0), maka akan dihasilkan nilai 62, bukan 63. Padahal, pembulatan 0.5 seharusnya dibulatkan ke atas. Bukan ke bawah. Contoh, saya memiliki kode baris perhitungan rasio solar untuk truk sebagai berikut:

decimal dkm = 0;
decimal drasio = 0;
drasio = Convert.ToDecimal(TextBox2.Text);
decimal total = 0;
dkm = Convert.ToDecimal(TextBox1.Text);
total = dkm / drasio;
total = Math.Round(total, 1); //hasilnya = 62.5
total = Math.Round(total, 0); //hasilnya = 62
TextBox3.Text = total.ToString();

Print screen:


rounding-csharp-ngaco1


Agar pembulatannya sesuai yang diinginkan, saya akhirnya memberikan sedikit trik supaya  pembulatan 0.5 bisa dibulatkan ke atas. Triknya sebagai berikut:

decimal dkm = 0;
decimal drasio = 0;
drasio = Convert.ToDecimal(TextBox2.Text);
decimal total = 0;
dkm = Convert.ToDecimal(TextBox1.Text);

total = dkm / drasio;
total = Math.Round(total, 1);

string stotal = total.ToString();
string spalingkanan = "";
if (stotal.Length > 1)
{
spalingkanan = stotal.Substring(stotal.Length - 2, 2);
if (spalingkanan == ".5")
{
total = total + (decimal)0.1;
}
}

total = Math.Round(total, 0);
TextBox3.Text = total.ToString();



print screen:


rounding-csharp-ok


Semoga bermanfaat.


Referensi: Stackoverflow

Kategori

info (205) foto (133) komentar ga penting (128) fotografi (123) Technology (104) Kantor (95) website (88) blog (84) Jakarta (78) comic strip (75) bisnis (71) karir (51) suara hati (51) senda-gurau (50) wisata (38) Bekasi (37) Internet (34) manajemen (31) kuliner (22) selebritis (21) soccer (21) Navision (20) iklan (14) kasus (14) sql server 2005 (13) buku (11) Greeting (10) movie (10) komik strip (9) novel (9) programming (9) televisi (9) Banjir (8) VCD/DVD (8) kopi (8) Vanessa (7) billiard (7) hypermarket (7) bogor (6) kesehatan (6) rumah (6) old document (5) Terios (4) basket (4) guru (4) Axapta (3) bioinformatika (3) azure (1)

My Instagram