Hogyan alakítsak át egy sima törtet (1 / 60) double-é C#-ban?
Az a gondom hogy már mindenféle módon megpróbáltam a törtet valós számként hozzáadni egy változóhoz de úgy látom hogy még mindig egész osztás lesz a vége.
Double-ként hoztam létre a változókat amiknek az értékét megnövelnem, rákényszerítettem a double típust az 1/60-ra mikor hozzáadtam a változóhoz, de az értéke nem változik sosem.
Még megpróbáltam konvertálással is (a += Convert.ToDouble(1 / 60);) de úgy se ment.
Tudnátok nekem segíteni ebben?
double d = 1f / 60;
vagy:
double d = 1.0 / 60;
a += 1.0/60;
De ilyesmire inkább csinálnék egy hagyományos tört típust sokkal inkább (ha nincs alapból ilyen).
Milyen hagyományos tört típust?
Nekem nem az kell, csak az hogy a tört értékét (ami tizedes tört ha leosztok vele csak nem valami szép szám így nem írom le oda, az is lehet hogy nem véges..) hozzáadjam a változóhoz.
Egyébként ha az egyik változót 1/60-al, a másikat meg 1/1200-al növelem, akkor egyszer egyenlőnek kell lennie a kettőnek, nem?
"Egyébként ha az egyik változót 1/60-al, a másikat meg 1/1200-al növelem, akkor egyszer egyenlőnek kell lennie a kettőnek, nem?"
De igen, hozzátéve azt, hogy a lebegőpontos számábrázolás miatt pontosan szinte biztos nem, ezért ==-t nem használhatsz az egyenlőségvizsgálathoz.
Akkor csináljak egy Tört struktúrát és növeljem folyamatosan a számlálót, majd ha ugyanannyi lesz mint a nevező akkor adjon hozzá egyet a változóhoz?
Esetleg közös nevezőt is csinálhatnék és akkor nem eggyel növelem meg a számlálót hanem 20-szal, és a legvégén csak a tört számlálóját és nevezőjét kell ellenőriznem, hogy azok legyenek egyenlők.
Így jó?
"Akkor csináljak egy Tört struktúrát és növeljem folyamatosan a számlálót, majd ha ugyanannyi lesz mint a nevező akkor adjon hozzá egyet a változóhoz?"
Ennek a fejedben biztos van értelme, nekem nem sokat mond. Másrészt nem tudom mire van szükséged, mert nem derült ki mi a probléma, amit meg kell oldani. Egyébként gugli első találatra kidob egy egész jó tört osztályt.
"Esetleg közös nevezőt is csinálhatnék és akkor nem eggyel növelem meg a számlálót hanem 20-szal, és a legvégén csak a tört számlálóját és nevezőjét kell ellenőriznem, hogy azok legyenek egyenlők.
Így jó?"
Ha csinálsz egy tört osztályt, akkor annak nem úgy működik, hogy neked kívülről kell ellenőrizgetned, hogy mennyi a számláló meg a nevező. Ha ez az első gondolatod, akkor rá kell feküdnöd az objektumorientáltságra.
Valahogy így kéne kinéznie a dolognak:
Tört t1 = new Tört(1/60);
Tört t2 = new Tört(1/2000);
Double d = (t1 + t2).ToDouble();
Melyik az az első találat?
(Nem tudom hogy van angolul a tört.)
Egyébként azt szeretném kideríteni hogy hány óra hány perc hány másodperckor találkozik pontosan a kismutató és a nagymutató dél(/éjfél) után legközelebb.
Annyi biztos hogy egy óra után, szóval a nagymutatót nulláról indítom, és minden másodpercben 1/60-at halad előre, a kicsit meg 5-ről, mert már egy óra van, és az pedig 1/1200-at halad előre másodpercenként (ha jól számoltam ki).
De így is most megcsináltam azzal a módszerrel amit én mondtam és 1 óra 5 perc 16 másodperckor vannak a legközelebb egymáshoz, de 4/1200 az eltérés közöttük...
Köszi!
Bár ez még nekem kicsit sok de majd egyszer végigfutom és megpróbálom megérteni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!