datilas Postado 29 Outubro, 2020 Postado 29 Outubro, 2020 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?
Moderadores Juliomar Marchetti Postado 29 Outubro, 2020 Moderadores Postado 29 Outubro, 2020 O que está usando para acessar o dados? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
datilas Postado 29 Outubro, 2020 Autor Postado 29 Outubro, 2020 6 horas atrás, Juliomar Marchetti disse: O que está usando para acessar o dados? zeosdbo mas mesmo com o valor fixo o resultado é o mesmo
Fundadores Daniel Simoes Postado 29 Outubro, 2020 Fundadores Postado 29 Outubro, 2020 Use "AsCurrency", que sempre será delimitado em 4 casas decimais Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
datilas Postado 29 Outubro, 2020 Autor Postado 29 Outubro, 2020 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;
datilas Postado 29 Outubro, 2020 Autor Postado 29 Outubro, 2020 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
Fundadores Daniel Simoes Postado 30 Outubro, 2020 Fundadores Postado 30 Outubro, 2020 O resultado do JSON, não é lido pelo outro lado ? Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
datilas Postado 30 Outubro, 2020 Autor Postado 30 Outubro, 2020 (editado) 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 30 Outubro, 2020 por datilas 1
JOSE CHAO Postado 26 Abril Postado 26 Abril Em 29/10/2020 at 15:22, datilas disse: 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 just do the below: program newtestfpjson; uses sysutils , fpjson ; type TJSONFloat4Number = class(TJSONFloatNumber) protected function GetAsString: TJSONStringType; override; end; function TJSONFloat4Number.GetAsString: TJSONStringType; var F: TJSONFloat; begin F := GetAsFloat; Str(F:0:4, Result); // format with your preferences end; var jsObjValues: TJSONObject; rValor: real; cValor: currency; sValor: single; dValor: double; begin SetJSONInstanceType(jitNumberFloat, TJSONFloat4Number); 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); WriteLn(jsObjValues.FormatJSON()); ReadLn(); end. And the output: { "REAL" : 1.2346, "CURRENCY" : 1.2346, "SINGLE" : 1.2346, "DOUBLE" : 1.2346 } 1
Moderadores Juliomar Marchetti Postado 26 Abril Moderadores Postado 26 Abril 1 hora atrás, JOSE CHAO disse: just do the below: program newtestfpjson; uses sysutils , fpjson ; type TJSONFloat4Number = class(TJSONFloatNumber) protected function GetAsString: TJSONStringType; override; end; function TJSONFloat4Number.GetAsString: TJSONStringType; var F: TJSONFloat; begin F := GetAsFloat; Str(F:0:4, Result); // format with your preferences end; var jsObjValues: TJSONObject; rValor: real; cValor: currency; sValor: single; dValor: double; begin SetJSONInstanceType(jitNumberFloat, TJSONFloat4Number); 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); WriteLn(jsObjValues.FormatJSON()); ReadLn(); end. And the output: { "REAL" : 1.2346, "CURRENCY" : 1.2346, "SINGLE" : 1.2346, "DOUBLE" : 1.2346 } se possível em português, creio que seja daqui Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora