Ir para conteúdo
  • Cadastre-se

dev botao

Problema com float lazarus


  • Este tópico foi criado há 1245 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

uso lazarus 32 bits 2.0.10 windows 10

eu tenho um campo VALOR no banco firebird do tipo DOUBLE PRECISION
com o valor: 1,23456

quando eu vou gerar um json com fpjon assim:
jsObjValues.Add('VALOR', aDataSet.FieldByName('VALOR').AsFloat)
o resultado é esse:
"VALOR": 1.2345600000000000E+002

se eu fizer assim:
jsObjValues.Add('VALOR', 1.23456)
o resultado é esse:
"VALOR": 1.2345600000000000E+001

no delphi funciona certinho
"VALOR": 1.23456

só para comparação:
o campo ID é do tipo integer

assim funciona:
FieldByName('ID').AsInteger
"ID": 1,

assim não funciona:
FieldByName('ID').AsFloat
"ID": 1.0000000000000000E+000,

alguem sabe como resolver no lazarus?

Link para o comentário
Compartilhar em outros sites

6 minutos atrás, Daniel Simoes disse:

Use "AsCurrency", que sempre será delimitado em 4 casas decimais

ja tentei tambem, eu vi isso em outro post aqui mas não resolveu.

segue um exemplo:

o codigo é esse:
uses
fpjson

procedure TForm1.Button1Click(Sender: TObject);
Var
  jsObjValues: TJSONObject;
begin
  jsObjValues := TJSONObject.Create;
  jsObjValues.Add('VALOR',1.23456 );
  ShowMessage(jsObjValues.AsJSON);
end;

 

Link para o comentário
Compartilhar em outros sites

Com esse teste:

var
  jsObjValues: TJSONObject;
  rValor: real;
  cValor: currency;
  sValor: single;
  dValor: double;
begin
  rValor := 1.23456;
  cValor := 1.23456;
  sValor := 1.23456;
  dValor := 1.23456;

  jsObjValues := TJSONObject.Create;
  jsObjValues.Add('REAL', rValor);
  jsObjValues.Add('CURRENCY', cValor);
  jsObjValues.Add('SINGLE', sValor);
  jsObjValues.Add('DOUBLE', dValor);

  Memo1.Text := jsObjValues.AsJSON;

olha o resultado:

{
"REAL":1.2345600000000001E+000,
"CURRENCY":1.2345999999999999E+000,
"SINGLE":1.2345600128173828E+000,
"DOUBLE":1.2345600000000001E+000
}

nada funciona, não sei o que fazer

Link para o comentário
Compartilhar em outros sites

19 minutos atrás, Daniel Simoes disse:

O resultado do JSON, não é lido pelo outro lado ?

pra falar e verdade eu não sei pois ele não vai ser lido por mim,

mas eu resolvi usando json4delphi (que esta na pasta "Fontes\Terceiros" do acbr)e nele funciona certinho,

é algum problema no fpjson que eu não consegui resolver.

eu só não queria depender de nenhum componente externo pois é um projeto simples e eu vou ter que entregar os fontes para o cliente

e ele não quer dependência externa para não gerar quebra quando houver uma possível migração ou atualização

Editado por datilas
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1245 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.