Fórum Casas Decimais ... #216403
25/02/2004
0
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
Curtir tópico
+ 0Posts
27/02/2004
Diogoalles
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
Gostei + 0
27/02/2004
Aroldo Zanela
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.
Gostei + 0
27/02/2004
Vasques
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
Gostei + 0
27/02/2004
Gustavolange
Vou fuçar aqui !
Muito obrigado pelas respostas !
Abraço !
Gostei + 0
27/02/2004
Gustavolange
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
Gostei + 0
27/02/2004
Aroldo Zanela
Informe o tipo de dado do banco e coloque um fragmento do código pra gente analisar melhor.
Gostei + 0
27/02/2004
Gustavolange
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)
Gostei + 0
27/02/2004
Aroldo Zanela
Faça o seguinte teste:
//e aki... ´,´+tranlateval(edtPrecoCusto.text) /100+
e coloca o códiga da Função tranlateval pra gente olhar.
Gostei + 0
27/02/2004
Gustavolange
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;
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 ?
Gostei + 0
27/02/2004
Aroldo Zanela
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;
Gostei + 0
27/02/2004
Gustavolange
mas muito obrigado!
e ainda bem que existe um fórum sobre delphi !
Gostei + 0
27/02/2004
Jasig Aurumalfa
Espero ter ajudado...
Gostei + 0
28/02/2004
Gustavolange
Espero ter ajudado...[/quote:768530c02e]
Ajudaria se vc me dissece(n repare meu português) como se usa isso, de notação cientifica...
Falow!
Gostei + 0
28/02/2004
Jasig Aurumalfa
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)