Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Narciso - Febbraio 09, 2025, 09:54:47 pm

Titolo: Problema con i currency
Inserito da: Narciso - Febbraio 09, 2025, 09:54:47 pm
posto il listato di un semplice form untextedit e due pulsanti

Codice: [Seleziona]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
 FileStream: TFileStream;
 writer: Twriter;
 begin
  FileStream := TFileStream.Create('prova', fmcreate);

    writer := Twriter.Create(FileStream, 4096);
    writer.writeCurrency(strtocurr(edit1.text));
    writer.free;
    filestream.free;
 end;


procedure TForm1.Button2Click(Sender: TObject);
var
 FileStream: TFileStream;
 Reader: TReader;
 i, j, n: Integer;
 begin
  FileStream := TFileStream.Create('prova', fmOpenRead);

    Reader := TReader.Create(FileStream, 4096);
    edit1.Text:=currtostr(reader.ReadCurrency);
    reader.free;
    filestream.free;
 end;

end.     

quando leggo il file il valore currency  viene moltiplicato per 1000.

Usero' un float, ma mi piacerebbe sapere perche' succede.
Titolo: Re:Problema con i currency
Inserito da: DragoRosso - Febbraio 10, 2025, 08:39:57 am
A me non funziona proprio. Funziona con tutti i tipi ma con currency non và. Non riporta ne un numero moltiplicato per xxxx ne diviso per xxxx ne simile.

Anche in debugger la visualizzazione dei currency è "distorta" sembra moltiplicato x 10k

C'è un topic sul forum int. in cui parlano del currency ed il debugger: https://forum.lazarus.freepascal.org/index.php/topic,67053.msg515182.html#msg515182 (https://forum.lazarus.freepascal.org/index.php/topic,67053.msg515182.html#msg515182)

Ritengo che forse qualche baco a livello di compilazione ci sia. Non ho mai usato il tipo currency in vita mia fortunatamente.

In ogni caso, consiglio spassionato, ti conviene usare le funzioni dello TFileStream x scrivere e leggere, TWriter non dovrebbe essere usato direttamente (TWriter dovrebbe essere l'incapsulamento di una classe definita nelle Windows API).

Ciao

EDIT: In Delphi il tutto funziona anche con i currency