Ciao a tutti, ancora non mi sono presentato, sono nuovo. Ho deciso di entrare qui perchè questo sito è fatto veramente bene, con guide ottime e tante persone che rispondono a mille domande. Passiamo ai fatti![]()
Sono giorni che provo a usare le frazioni in delphi, siccome non sono un esperto ma un novizio, ho cercato in giro e credo che non esista questa funzione. Quello che vorrei fare è trasformare i numeri decimali in frazioni. Mi sono messo all'opera e volevo creare una procedura, ma non ci riesco![]()
Ho messo tutto il codice perchè ho utilizzato anche altre procedure, una di queste l'ho prese da questo sitocodice:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } function Potenza(base:integer;esponente:integer):integer; public { Public declarations } end; var Form1: TForm1; implementation function TForm1.Potenza(base:integer;esponente:integer):integer; var i:integer; // La funzione dichiarata calcola la potenza x:integer; // n-esima di un numero qualsiasi di tipo begin // integer. Accetta due parametri, base if esponente = 0 then // (di tipo integer, per assicurarci Potenza := 1 // che non sia troppo grande) ed esponente else // (di tipo integer). begin // Se l’esponente è uguale a 0, allora il x := base; // risultato sarà 1 e con la struttura if...then for i:=2 to esponente do // viene evitato un calcolo inutile. x := x * base; Potenza := x; end; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var n, i, f, g, p: Real; s, u, z: String; c, v: Integer; begin s := Edit1.Text; // <= Il valore decimale inserito nella casella di for c := 1 to Length(s) do // testo Edit1 viene memorizzato in una if s[c] in ['.', ','] then // variabile stringa locale; facendo la s[c] := DecimalSeparator; // scansione della stringa, ogni carattere che n := StrToFloat(s); // corrisponda ad un punto o ad una virgola f := Frac(n); // viene sostituito col separatore "ufficiale" u := FloatToStr(f); // dei decimali. Delete(u, 1, 2); // <= Cancella il 1° e il 2° carattere. z := '+u'; i := StrToFloat(z); while i = 0 do begin f := f * 10; v := v + 1; end; p := Potenza(10 ,v); g := n * p; Edit2.Text := FloatToStr(g); Edit3.Text := FloatToStr(p); end; end., non riesco a capire quale sia l'errore, no, mi spiego meglio l'errore l'ho capito, non posso trasformare uno string che toglie dei caratteri in float (0 (zero) e ,) perchè utilizzando frac mi da 0, (e il numero decimale). Non so ditemi cosa fare, ho spiegato proprio male, però aiutatemi, se vi servono chiarimenti perchè non sono stato abbastanza chiaro fatemi sapere, grazie.

Rispondi quotando