GARANTIR DESCONTO

Fórum Casas Decimais ... #216403

25/02/2004

0

Galera...
Como que fasso para salvar um valor na minha tabela com apenas duas casas após a virgula?
ja tentei varias funcoes que axei aqui no clube, mas nada funciona.
O interessante é que por exemplo, se eu salvar um valor como, 50,50 ele salva assim mesmo
mas se eu salvo como 50,30 ele salva alguma coisa como 50,298745200245 entendem ???

Alguem pode me ajudar???

Obrigado.

Gustavo
gustavo@joscil.com.br


Gustavolange

Gustavolange

Responder

Posts

27/02/2004

Diogoalles

Gustavo,

dê uma pesquisada sobre como usar campo do tipo Numeric (poste uma nova pergunta no fórum referente a isso se precisar) ...
vc com certeza encontrará a solução ..
o primeiro problema vc já resolveu q era substituir o Float por Numeric .. agora é só ver pq dá o erro ...
eu não tenho esse problema q vc está tendo , então não tenho mais o q sugerir ..

abraço

Diogo


Responder

Gostei + 0

27/02/2004

Aroldo Zanela

Galera... Como que fasso para salvar um valor na minha tabela com apenas duas casas após a virgula? ja tentei varias funcoes que axei aqui no clube, mas nada funciona. O interessante é que por exemplo, se eu salvar um valor como, 50,50 ele salva assim mesmo mas se eu salvo como 50,30 ele salva alguma coisa como 50,298745200245 entendem ??? Alguem pode me ajudar??? Obrigado. Gustavo gustavo@joscil.com.br


Você pode solucionar o seu problema conforme já foi sugerido, ou seja, utilizar Numeric ou Decimal (15,2). A questão da representação de números reais em sistemas de computador está relacionado ao espaço reservado para armazenar a mantissa.


Responder

Gostei + 0

27/02/2004

Vasques

Olá!

penso que usar campos numéricos na base de dados para guardar valores monetários é uma boa ideia. é também o que eu uso.
Se eu percebi bem qual o seu problema, penso que seja sufuciente mudar as propriedades do windows e do BDE, alterando os separadores decimal e o separador de agrupamento de digitos. Pelo que percebi você usa um formato tipo 100,000.12 - pode tambem ajustar no delphi as variáveis de ambiente DECIMALSEPARATOR := ´.´ e
THOUSANDSEPARATOR := ´,´. pode ainda formatar os valores antes de os guardar na base de dados usando a função FloatToStrf. veja no help as várias formatações que pode usar com este comando. se usar o FloatToStrf tem de acertar os valores das duas variaveis de ambiente.

espero ter ajudado
saudações
Claudio Vasques


Responder

Gostei + 0

27/02/2004

Gustavolange

Ta ok...

Vou fuçar aqui !

Muito obrigado pelas respostas !

Abraço !


Responder

Gostei + 0

27/02/2004

Gustavolange

bom...o problema de gravar com muitas casas apos a virgula eu resolvi...
mas agora, tenho outro (hehe), ao inves de 352,52 ele grava como 35252,00

e ai?alguem pra me dar uma luz?

Abraço

Gustavo
gustavo@joscil.com.br


Responder

Gostei + 0

27/02/2004

Aroldo Zanela

Colega,

Informe o tipo de dado do banco e coloque um fragmento do código pra gente analisar melhor.


Responder

Gostei + 0

27/02/2004

Gustavolange

o campo eh Numeric(9,2) e o código segue..

if not MySQL(dm.qryGenerica,´insert into produtos (cod,produto,preco,unMed,dtInc,prcusto,narrativa,ipi) values ´+
´(´+lblCod.caption+´,´+quotedstr(edtProduto.text)+

//aki...
´,´+tranlateval(edtPreco.text)+´,´+quotedstr(cmbUnMed.text)+

´,´+quotedstr(lblDate.caption)+

//e aki...
´,´+tranlateval(edtPrecoCusto.text)+

´,´+quotedstr(mm.lines.text)+

//e nesse também! numeric (3,2)
´,´+tranlateval(edtIpi.text)+´)´) then
Application.messagebox(´Erro tentando gravar na tabela de Produtos...´,´Erro´,
mb_ok+mb_iconerror)


Responder

Gostei + 0

27/02/2004

Aroldo Zanela

Colega,

Faça o seguinte teste:

//e aki... 
´,´+tranlateval(edtPrecoCusto.text) /100+ 


e coloca o códiga da Função tranlateval pra gente olhar.


Responder

Gostei + 0

27/02/2004

Gustavolange

código da função tranlateval...

function TranlateVal(Value: String): String;
var
I: Word;
S: String;
begin
S := ´0´;
if Length(Value) > 0 then
begin
for I := 1 to Length(Value) do
begin
if Value[I] in [´0´..´9´] then
S := S + Value[I]
else
if Value[I] = ´,´ then
S := S + ´.´;
end;
end;
Result := S;
end;


Responder

Gostei + 0

27/02/2004

Gustavolange

//e aki... 
´,´+tranlateval(edtPrecoCusto.text) /100+ 


Aroldo, não funcionou, pois tenta dividir uma string...
Não sei mais o que fazer...

Se eu mudar os campos pra varchar, eu consigo soma, subtrai, dividir...normalmente usando o strtofloat ?


Responder

Gostei + 0

27/02/2004

Aroldo Zanela

:D Desculpe, muitas horas de VB dá nisso. hehehehe

Fiz um teste aqui com Paradox, sendo um campo numerico e outro money e funcionou corretamente. Veja abaixo:

procedure TForm1.Button1Click(Sender: TObject);
var nCod: Integer;
begin
Query1.Close;
  table1.Last;
nCod := table1codigo.AsInteger+1;
  with Query1 do
  begin
  SQL.Clear;
    SQL.Add(´Insert into TESTE values (´+IntToStr(nCod)+´, ´+TrocaSeparador(edit1.text)+´)´);
    ExecSQL;
  end;
end;

function TForm1.TrocaSeparador(Valor: String): String;
var nPos: Integer;
begin
nPos := Pos(´,´, Valor);
  Delete(Valor, nPos, 1);
  Insert(´.´, Valor, nPos);
  TrocaSeparador := Valor;
end;



Responder

Gostei + 0

27/02/2004

Gustavolange

Falo Aroldo, só vo pode testa esse codigo segunda-feira, ou quem sabe amanha de manha, ai te informo se fui bem sucedido!

mas muito obrigado!

e ainda bem que existe um fórum sobre delphi !


Responder

Gostei + 0

27/02/2004

Jasig Aurumalfa

Tente usar notação científica...
Espero ter ajudado...


Responder

Gostei + 0

28/02/2004

Gustavolange

[quote:768530c02e=´Jasig Aurumalfa´]Tente usar notação científica...
Espero ter ajudado...[/quote:768530c02e]

Ajudaria se vc me dissece(n repare meu português) como se usa isso, de notação cientifica...

Falow!


Responder

Gostei + 0

28/02/2004

Jasig Aurumalfa

Lembra aqueles calculos que se usa para a simplificação do calculo, geralmente para funções decimais:
Ex:
20000000000000000
Seria:
2 multiplicado por 10 elevado a 16...
Ex²:
0,0000000000000002
Seria
2 multiplicado por 10 elevado a -16...
Assim, aquele seu calculo que você está tentando desenvolover, seria resolvido com um calculo...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar