Rabu, 02 November 2011

Pembulatan Angka per 100 Ribu

Assalamu'alaikum

Suatu hari sya punya kasus pemrograman Visual Basic + Sql server, project Software Koperasi Simpan Pinjam,
Manager Koperasi meminta agar perhitungan Bunga Tabungan di buat per kelipatan 100 ribu
dan dibuat per saldo yg paling kecil

Misal :
Nasabah :   A   mempunyai Saldo akhir 125.000 maka yg terhitung bunga hanya 100.000
                  jadi range antara 100.000 - 200.000 bunga yg terhitung hanya 100.000 dan seterusnya per                    
                  kelipatan 100 ribu
                  Rumus 100.000 * 0.5 /100 (0,5 adalah bunga Tabungan)

Setelah googling ketemu dengan Function pembulatan seperti ini :


Private Function RoundINT(ByVal Number As Double, _
        Optional ByVal NumDigitsToRound As Double = 0) As Double
Dim Factor As Double
Dim ResultRound As Double
Dim Temp As Double

  Factor = 1 / Val("1" & Replace(Space(NumDigitsToRound), " ", "0"))
  ResultRound = Round(Number * Factor, 0)
  If Right(Round(Number * Factor, 1), 1) = 5 And _
     Int(Round(Number * Factor, 1)) = ResultRound Then
    ResultRound = ResultRound + 1
  End If
  RoundINT = ResultRound / Factor
End Function

tetapi function diatas tdk bisa menyelesaikan masalah saya,.... puyeng.com
setelah dipikir2 sambil tiduran, terinspirasi dari saran temen saya Nurkholis Majid
untuk membuat kelipatan 100.000 ke dalam sebuah database (Sql Server)

Ok Kita Mulai : siapkan dulu rokok dan camilan nya ... jangan lupa Asbak nya juga ....wkwkwkwk

kita buat function loop kelipatan 100.000 kedalam database sehinga terbentuk table RANGE_BUNGA


lalu kita masuk ke project vb kita buat script sedikit manipulasi :

Dim JumlahSaldoKecil  as double

' Mencari saldo terkecil punya nasabah

Private Sub SumJumlahSaldoKecil()
Set Ado_Data = New ADODB.Recordset
    SqlCmd = "select min(min_saldo) as min_saldo from tabungan where ac_nasabah ='" & txtAcNasabah.Text & "' and month(tgl_efektif) = '" & Mid(TglEfek.Value, 4, 2) & "' and year(tgl_efektif) = '" & Right(TglEfek.Value, 4) & "'and min_saldo > 0"
    Ado_Data.Open SqlCmd, Adocon, adOpenKeyset, adLockOptimistic
    If Not ((Ado_Data.BOF) Or (Ado_Data.EOF) Or IsNull(Ado_Data(0))) Then
          JumlahSaldoKecil = Ado_Data!min_saldo
    End If
End Sub



Private Sub SelectRange()
' Saldo dibawah 100.000 tidak dapat bunga
If JumlahSaldoKecil < "100000" Then
   SqlCmd = "update nasabah set update_saldo_kecil = " & Val(0) & ""
   SqlCmd = SqlCmd & " where ac_nasabah ='" & Trim(txtAcNasabah.Text) & "'"
   Adocon.Execute SqlCmd
Else
   ' Menangkap Range Bunga
   lsquery = "SELECT awal,akhir "
   lsquery = lsquery & " From range_bunga"
   lsquery = lsquery & " where awal <= " & JumlahSaldoKecil & " and akhir > " & JumlahSaldoKecil & " "
   Set recRinci = Adocon.Execute(lsquery)
       Do While Not recRinci.EOF
           ' Update saldo terkecil yg nantinya terhitung jadi bunga, Rumus Bunga (update_saldo_kecil                   
              * bunga/100 )
           SqlCmd = "update nasabah set update_saldo_kecil = " & Val(recRinci!awal) & ""
           SqlCmd = SqlCmd & " where ac_nasabah ='" & Trim(txtAcNasabah.Text) & "'"
          Adocon.Execute SqlCmd
           recRinci.MoveNext
    Loop
End If
End Sub


akhirnya ketemu seperti ini:


jadi yang terhitung dapat bunga hanya 100.000 bukan 125.000

Alhamdulilah bisa tidur nyenyak lagi dech... tks sobat (Nurkholis Majid)
Semoga bisa membantu temen2 yang ketemu kasus yg sama

Salam dari banyuwangi