Untungnya, ini berbicara dalam VBA Excel. Jadi, bisa dengan asumsi bahwa pengolahan tersebut (sebagian besar) adalah proses ETL untuk mendapatkan data yang dibutuhkan.
Betul mas Zainul, Long dan Integer memiliki sifat yang sama sebagai datatype bilangan bulat, dan itu hanyalah sebuah kebiasaan saya saja. Ceritanya begini : Untuk suatu data yang jumlah cacahnya banyak dan harus disimpan oleh variabel itu dalam waktu lama (misal array bilangan bulat), maka sangat penting memperhatikan datatype berdasar alokasi memorinya. Tetapi untuk kasus sebuah variabel yang hanya menyimpan sesaat (misal suatu loop atau proses hitungan tertentu), maka tentunya yang diperhatikan adalah performance proses itu sendiri bukan alokasi memorinya, karena besar alokasi memori selalu tetap. Sedangkan untuk sistem operasi berbasis x86 (32 bit), proses dikerjakan selalu berdasar hitungan 32 bit. Datatype Long membutuhkan alokasi memori 4 byte (32 bit) jadi proses kerja tidak perlu mengkalkulasi luas memori, tinggal menuju ke ponter variabel itu, ambil seluruhnya. Jika pakai datatype Integer (2 byte = 16 bit), maka kerja akan menuju pointer tersebut, kalkulasi untuk ambil separo blok memori, baru dapat hasilnya. Kalau dengan komputer jaman sekarang tidak akan terasa bedanya, itu betul. Tapi tetap saja jumlah proses real yang dikerjakan komputer lebih sedikit dengan Long dibanding Integer. Kid. 2010/2/28 zainul ulum <[email protected]> > > > Maturnuwun mas Kid, > Bermanfaat sekali penjelasannya. > > Ceritanya begini, > > Saya sedang mengolah data hasil ukuran sudut dari alat total station (TS) > yang dinyatakan dalam derajat, menit dan detik. Jika hasil pengukurannya > adalah 204 derajat, 1 menit, 1 detik hasil download dari TS tertulis > 204.0101 > > Jadi kalo data dari TS adalah 204.01, dibaca 204 derajat, 1 menit. > > Alasan kenapa saya memakai fungsi yang menghasilkan data type integer > adalah > mempertimbangkan bahwa hasil dari fungsi tersebut hanya dari angka 0 sampai > 59. > > D = Int(DMS)'derajat DMS=Sudut dalam format d.mmss > M = Int((DMS - D) * 100)'menit > s = (DMS * 100 - Int(DMS * 100)) * 100'detik > > Dengan rumus di atas sebagian besar mendapatkan hasil yang saya harapkan, > tetapi untuk sudut2 tertentu terjadi kesalahan. Misal untuk sudut 204.1 > D=204 tetapi M=0 > > Kemudian saya ganti INT mejadi FIX, ternyata tetep aja M=0 > > Sebelum ada jawaban dari mas Kid, karena pusing mikirin INT dan FIX > akhirnya > rumus saya rubah menjadi, > > s = Format(absDMS, "000.000000") > Der = CInt(Left(s, 3)) > Men = CInt(Mid(s, 5, 2)) > Det = CDbl(Mid(s, 7, 2)) + CDbl(Right(s, 2) / 100) > > Kini, saatnya menerapkan saran dari Mr.Kid > > Apakah akibatnya jika semua data type yang semula integer dirubah menjadi > long (integer)? > > Karena setahu saya ada hubungannya dengan alokasi memory yang akan dipakai > jika integer adalah 2 byte dengan range -32768 to 32767 > Jika long adalah 4 byte dengan range -2147483648 to 2147483647 > > Mohon maaf kepanjangan ceritanya > _zainul_ > ________________________________________ > From: [email protected] <belajar-excel%40yahoogroups.com>[mailto: > [email protected] <belajar-excel%40yahoogroups.com>] > On Behalf Of Mr. Kid > Sent: Sunday, February 28, 2010 5:24 AM > To: [email protected] <belajar-excel%40yahoogroups.com> > Subject: Re: [belajar-excel] kenapa INT((204.01 - 204) * 100) <> 1 ? > > > > Hai mas Zainul, > > datatype double dan single adalah bilangan approximate dan diproses dengan > algoritma yang berbeda dengan bilangan bulat seperti integer atau long. > Jadi > nilai desimal suatu bilangan akan tersusun dalam banyak angka dibelakang > koma yang dibulatkan. Sedangkan fungsi Int() akan membulatkan ke terkecil > terdekat. > > Alhasil, semua bilangan approximate (double dan single) akan dibulatkan ke > nilai terkecil terdekat. Sedangkan 1 didefinisikan sebagai nilai > approcimate > berupa 0.99sekian > > Fungsi konversi datatype berbeda dengan fungsi pembulatan suatu angka > seperti Int() > Int(99.99) = 99 > Int(-99.99) = -100 > Cint(99.99)=100 > Cint(-99.99)=-100 > > maksud dari syntax mas Zainul adalah memeriksa apakah selisihnya bernilai > 1, > maka kerjakanlah keduanya sebagai bilangan bulat, atau jadikanlah hasil > akhir sebagai bilangan bulat > > silakan dicoba, agar punya gambaran yang lebih jelas > clng((204.01-204) * 100) > 204.01 * 100 mod 204*100 > clng(204.01 * 100) - clng(204 * 100) > > Semoga bermanfaat. > Kid. > > __________ Information from ESET NOD32 Antivirus, version of virus > signature > database 4901 (20100227) __________ > > > The message was checked by ESET NOD32 Antivirus. > > http://www.eset.com > > > >

