On kyllä niin turha härpäke... sain idiksen laskimestani kun siinä oli tällainen toiminto niin pitihä se ite sitten tehdä :D
Niijjoo, tänkin tein eka PSIONilleni, arvatkaa tuliko hidas :)
Aika huonosti tehty, tiedän sen, tää on vaan yks tapa tehdä tää _eikä_ oo paras. Demo vaan miten sen vois tehä yksinkertaisesti. Eli idea on tällane, esim jos desimaaliluku on vaik 1,33333333...:
Irrotetaan desimaaliluvut erilleen. Saadaan 0,33333... ja ykkönen muistiin jonneki.
ensin koklataan 0.3333.../1, ei, jaettava ei ole kokonaisluku. kasvatetaan jakajaa yhdellä ja jaettavaksi jakaja * desimaaliluku.
Saadaan 0.66666.../2, plää, ei ymmärrettävässä muodossa.. jatketaan.
Tulee 1/3, ja yköne vielä o muistissa --> tulos 1 ja yks kolmasosa.
Joo, aika turhake :) ei ihan kaikessa tartte. Jossain omassa laskinohjelmassa vaik :)
Private Sub Form_Load() luku = 56170 / 1337 'luku mikskälie desimaaliluvuksi, tästä tulee perimmäinen vastaus plus tämänhetkinen ikäni jaettuna elitismillä :_D 'irrotetaan luvusta desimaalit koko = Int(luku) luku = luku - Int(luku) If luku = 0 Then End 'jos ei o desimaaleja niin ihan tyhmää 'tehdään siit murtoluku tyyliin luku/1, eli ylä/ala (siis ylä jaettuna alalla) ylä = luku ala = 1 'loopataan kunnes ylä o kokonaisluku, eli luku on ymmärrettävässä muodossa 'tällä tavalla whiletetään koska muuten tulee pyöristysvirheitä tyyliin pitäs tulla 1, tuleeki 0.999999999999999999 While Abs(ylä - Int(ylä)) > 0.00001 'lisätään jaettavaa ja jakajaa samassa suhteessa ala = ala + 1 ylä = Round(ala * luku, 8) Wend MsgBox koko & " + " & Int(ylä) & "/" & ala 'kerro lopputulos End End Sub
Kyllä tuo ihan toimivalta vaikuttaa. Ja vaikkei oliskaan paras/nopein mahdollinen tapa, niin onhan se aina hienoa, jos se on kuitenkin itse keksitty.
Tällä metodillahan ei saa päättymättömiä jaksottomia desimaalilukuja muutetuksi. Päättymättömät jaksolliset saadaan, kunhan tunnetaan se jakso.
Pyöristysvirheiden takia ohjelma jumiutuu, jos lukuna on esim. 2.3 (tosin 6.9 / 3 toimii). Korjauksena silmukan sisällä laskettava luku täytyy pyöristää sopivalle tarkkuudelle:
ylä = Round(ala * luku, 8)
Turambar kirjoitti:
Tällä metodillahan ei saa päättymättömiä jaksottomia desimaalilukuja muutetuksi.
Voiko kahden kokonaisluvun jakolaskun tuloksena olla päättymätön, jaksoton desimaaliluku?
Okei Laaksonen, korjattu.
lainaus:
Voiko kahden kokonaisluvun jakolaskun tuloksena olla päättymätön, jaksoton desimaaliluku?
Ei... jos jaat lukuja jakokulmassa, (x / y), kun "numerot loppuvat" ja "jää vain nollia jäljelle" ja kun yleensäkin luvulla y jaettaessa on vain y kappaletta mahdollisia jakojäännöksiä, on jakson pituus on pakostakin <= |y|.
Korjaus... < |y| koska jos jakojäännökseksi tulee jossain kohdassa nolla, ei luvun desimaaliesitys ole päättymätön...
Aihe on jo aika vanha, joten et voi enää vastata siihen.