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] [mailto:[email protected]]
On Behalf Of Mr. Kid
Sent: Sunday, February 28, 2010 5:24 AM
To: [email protected]
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