2009-03-15 14 views
5

È possibile memorizzare una frazione come 3/6 in una variabile di qualche tipo? Quando provo questo memorizza solo i numeri prima del /. So che posso usare 2 variabili e dividerle, ma l'input proviene da un singolo campo di testo. È possibile?Dalla frazione al decimale e ritorno?

Voglio farlo perché ho bisogno di calcolare le quote in quote decimali.

Una domanda bonus;) - Esiste un modo semplice per calcolare un valore decimale in una frazione? Grazie ..

risposta

3

La cosa migliore da fare è implementare una classe frazione (o una classe numero razionale). Normalmente ci vorrebbe un numeratore e un denominatore ed essere in grado di fornire un doppio, e fare matematica di base con altri oggetti frazione. Dovrebbe anche essere in grado di analizzare e formattare le frazioni.

Rational Arithmetic on Rosetta Code sembra qualcosa di buono per iniziare.

5

In breve, non esiste un vero modo per estrarre la frazione originale da un decimale.

Esempio: prendere 5/10

si otterrà 0,5

ora, 0,5 traduce anche indietro a 1/2, 2/4, 3/6, ecc

La cosa migliore è memorizzare ciascun intero separatamente ed eseguire il calcolo in un secondo momento.

3

Ho paura che non ci siano risposte facili per voi su questo. Per creare la frazione, devi dividere il campo di testo su "/", convertire le due metà in double s e dividerle. Per quanto riguarda la conversione in una frazione, dovrai aprire un libro di testo matematico e capirlo. (Peggio ancora, un doppio non è in realtà preciso - potresti pensare che abbia 0,1 in esso, ma in realtà ha 0.0999999999999999972626 o qualcosa del genere, quindi dovrai scegliere una precisione e provarci, o scrivere una sorta di frazione classe basata su una coppia di interi.)

1

C'è un modo semplice per calcolare un valore decimale in una frazione?

Se si limita i valori decimali per un certo numero di punti decimali si potrebbe creare una tabella di ricerca.

 
0.3333, 1/3 
0.6666, 2/3 
0.0625, 1/16 
0.1250, 1/8 
0.2500, 1/4 
0.5000, 1/2 
0.7500, 3/4 
etc... 

Quindi, se l'input dell'utente 0.5 si pad con 0 di fino a che non hai 4 cifre decimali. Dovresti quindi utilizzare la tabella di ricerca per restituire "1/2". La tabella di ricerca dovrebbe probabilmente essere un dizionario di sorta.

Non sarebbe neanche troppo difficile fare stime. Ad esempio, se l'utente ha inserito 0,0624, è possibile selezionare facilmente il valore nella tabella più vicina a tale decimale. In questo caso restituirebbe "1/16".

Non lasciare che la digitazione/immissione del set finito di coppie di decimali/frazione ti spaventi (non è molto grande a seconda della precisione scelta).

Se tutto il resto fallisce, forse una ricerca su google rivelerebbe una libreria che fa questo tipo di questo per voi.

+0

Hrm ... Perché i downvotes? – user72491

3

Il metodo, come detto, è di memorizzare il numeratore e il denominatore, molto nel modo in cui è possibile scrivere su carta.

per 'C' utilizzare l'aspetto

GNU Multiple Precision Arithmetic Library

per 'razionale' nella documentazione.

+0

La domanda è codificata C, sì. Tuttavia, penso che l'autore abbia commesso un errore e abbia pensato che Obj-C e C siano correlati. Eppure, una risposta utile. +1. – strager

+0

@strager: gli obiettivi C e C sono correlati, in quanto uno è un superset rigoroso dell'altro. GMP può essere usato con Obj-C, anche se probabilmente è eccessivo. –

Problemi correlati