Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Desimaaliluku murtoluvuksi

sooda [02.09.2004 21:11:26]

#

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

hunajavohveli [04.09.2004 10:04:24]

#

Kyllä tuo ihan toimivalta vaikuttaa. Ja vaikkei oliskaan paras/nopein mahdollinen tapa, niin onhan se aina hienoa, jos se on kuitenkin itse keksitty.

Turambar [04.09.2004 12:27:05]

#

Tällä metodillahan ei saa päättymättömiä jaksottomia desimaalilukuja muutetuksi. Päättymättömät jaksolliset saadaan, kunhan tunnetaan se jakso.

Antti Laaksonen [04.09.2004 13:58:02]

#

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?

sooda [04.09.2004 18:51:12]

#

Okei Laaksonen, korjattu.

ztane [06.09.2004 15:24:24]

#

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...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta