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
codice:
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.
Ho messo tutto il codice perchè ho utilizzato anche altre procedure, una di queste l'ho prese da questo sito
, 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.