Silva_henry Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 Olá pessoal.Tenho um sisteminha que pega valores de uma planilha de excel e joga no meu banco de dados.Porém eu queria que ele pegasse os valores desta planilha de excel e jogasse para o meu banco de maneira já formatada.Por exemplo:modulo.cds_bombasHP.value := MSExcel.ActiveSheet.Range['AB' + IntToStr(i)].Value;O comando acima irá por exemplo me retornar um valor como : 146,488. Eu queria que ele aproximasse e jogasse no meu banco do valor arredondado 147,5 Sempre com uma casa depois da vírgula.O campo em minha tabela é Float.Obrigado pela atençãoAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Duduh_Capixaba Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 (editado) 146,488. Eu queria que ele aproximasse e jogasse no meu banco do valor arredondado 147,5Você quis dizer 146,5, certo?! Acredito eu que basta você setar no seu banco apenas uma casa decimal depois da vírgula. No Access, por exemplo, essa tarefa é bem simples. Diga qual é o banco que você usa para podermos ajudar melhor.Mas ainda acho que o melhor método é você criar uma coluna a mais na sua tabela Excel e arredondar por lá mesmo. O Excel te dá muitas opções fáceis para arredondamentos. Assim você evitará códigos desnecessários na sua aplicação. Editado Agosto 29, 2008 por Duduh_Capixaba Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Agosto 29, 2008 Autor Denunciar Share Postado Agosto 29, 2008 Eu quis dizer 146,5 mesmo,rsrs,me desculpe.Uso Banco firebirdO problema é que a planilha do qual estou importando os dados,é muito grande mesmo,meio complexa,pois o valor que estou puxando é o valor de um campo que possui uma fórmula que realiza cálculos da varios campos.na verdade o valor esta arrendondado,porém ao invéz de meu codigo pegar o valor do campo,ele pega o valor do resultado das formulas que contem dentro do campo ,que por sua vez não esta formatado.No firebird tem como eu arredondar apenas em um campo? pois em outros campos preciso da formatação original mesmo.Acho que se usa o formatfloat,mas não sei como proceder... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diego de Souza Silva Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 (editado) Boom dia ^^viu, você pode usar format float sim, é assim q se utiliza: formatFloat(mascara,valorFloar); Na mascara, deve-se colocar um char '#' pra cada digito de numero que você quer no resultado, e um char '.' para dividir os decimais. No seu caso, você chamaria assim ó formatFloat('###.#',variavelFloat); A função retorna uma string contendo o numero real arredondado e formatado de acordo Editado Agosto 29, 2008 por Diego de Souza Silva Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Duduh_Capixaba Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 No caso, você tem que ter esses números arredondados dentro da sua base por obrigatoriedade, ou você quer mostrar esses dados arredondados dentro do seu projeto? Fica mais fácil você usar formatos de arredondamentos dentro do Delphi. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diego de Souza Silva Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 No caso, você tem que ter esses números arredondados dentro da sua base por obrigatoriedade, ou você quer mostrar esses dados arredondados dentro do seu projeto? Fica mais fácil você usar formatos de arredondamentos dentro do Delphi.e além disso, você não perde algumas casa decimais no caso de precisar mais tarde não é? xD Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Agosto 29, 2008 Autor Denunciar Share Postado Agosto 29, 2008 Opa,valeu pelas informações pessoal.No caso vou ter que usar por obrigatoriedade da empresa,com uma casa decimal depois da vírgula mesmo.na verdade é uma tabela contendo informações para testes de bombas submersas.Este valor é padronizado pela empresa arrendodado mesmo.Vou efetuar os testes aqui,assim que terminar os testes e outras coisinhas aqui eu posto o resultadoDe qualquer forma muito Obrigado pelas informações!Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Agosto 29, 2008 Autor Denunciar Share Postado Agosto 29, 2008 Problemas,rsrsEu recebo um valor tipo String do excel ( pelo o que eu entendi)veja ;modulo.cds_bombasALT.value := Formatfloat('###.#',MSExcel.ActiveSheet.Range['AC' + IntToStr(i)].Value);erro : Incompatible types Double and StringObs : O campo ALT da tabela é float Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Duduh_Capixaba Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 O que acontece se você retirar o Formatfloat? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Agosto 29, 2008 Autor Denunciar Share Postado Agosto 29, 2008 Deixei assim;modulo.cds_bombasALT.value := ('###.#',MSExcel.ActiveSheet.Range['AJ' + IntToStr(i)].Value);Recebo a mensagem de erro a seguir :[DCC Error] Unit1.pas(274): E2029 ')' expected but ',' found[DCC Error] Unit1.pas(286): E2029 '.' expected but ';' found Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Duduh_Capixaba Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 (editado) Não, não... Eu quis dizer pra retirar todo o código do Formatfloat. No caso, ficaria assim:modulo.cds_bombasALT.value := MSExcel.ActiveSheet.Range['AJ' + IntToStr(i)].Value;Porque, mesmo que você faça um formato com apenas uma casa decimal com o Formatfloat, se o campo da sua base de dados estiver setado para duas casas, a única diferença é que ele vai importar com um zero no final. No caso, o 146,488 apareceria no seu banco como o número 146,50, entendeu?! Editado Agosto 29, 2008 por Duduh_Capixaba Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Silva_henry Postado Agosto 29, 2008 Autor Denunciar Share Postado Agosto 29, 2008 Olá.modulo.cds_bombasALT.value := MSExcel.ActiveSheet.Range['AJ' + IntToStr(i)].Value;Deste jeito ele me gera um número com 3 casas decimais,e não arredonda entendeu ?O que eu mais quero seria arredondar mesmo.obrigadoAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Duduh_Capixaba Postado Agosto 29, 2008 Denunciar Share Postado Agosto 29, 2008 (editado) Pois é isso que eu estou tentando te explicar. Não adianta você fazer um formato na hora de importar os dados para sua base. Digamos que o campo ALT esteja setado para mostrar duas casas decimais. Com o format, o que você vai conseguir é isso: 146,488 > 146,50.Não sei se é isso mesmo que você quer. Se for, insista no Formatfloat, pois eu fiz um teste aqui com o mesmo código que você deixou acima e deu certo. Importei um número 1,123 e ele se tornou o número 1,10. Agora, se você pretende tranformar um número 146,488 em 146,5, aí já não adianta códigos no Delphi, você terá que estudar um meio do campo ALT ser configurado dessa forma.---------------------------Edição:Analizando a base de dados Firebird, vi que não há como alterar a quantidade de casas decimais em um campo Float. O ideal seria você mudar seu campo para Decimal. Aí sim, você conseguirá ter o resultado que pretende. Abraço! Editado Agosto 29, 2008 por Duduh_Capixaba Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 30, 2008 Denunciar Share Postado Agosto 30, 2008 modulo.cds_bombasALT.value := MSExcel.ActiveSheet.Range['AJ' + IntToStr(i)].Value;Deste jeito ele me gera um número com 3 casas decimais,e não arredonda entendeu ?O que eu mais quero seria arredondar mesmo.experimente usar a funçãofunction Round(X: Extended): Int64;Descrição: retorna o valor de X arredondado ao mais próximo número inteiro.exemplo:modulo.cds_bombasALT.value := Round(MSExcel.ActiveSheet.Range['AJ' + IntToStr(i)].Value);abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Diego de Souza Silva Postado Setembro 1, 2008 Denunciar Share Postado Setembro 1, 2008 (editado) Problemas,rsrsEu recebo um valor tipo String do excel ( pelo o que eu entendi)veja ;modulo.cds_bombasALT.value := Formatfloat('###.#',MSExcel.ActiveSheet.Range['AC' + IntToStr(i)].Value);erro : Incompatible types Double and StringObs : O campo ALT da tabela é floatvocê já tentou assim ó: modulo.cds_bombasALT.value := Formatfloat('###.#',StrToFloat(MSExcel.ActiveSheet.Range['AC' + IntToStr(i)].Value)); Editado Setembro 1, 2008 por Diego de Souza Silva Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Silva_henry
Olá pessoal.
Tenho um sisteminha que pega valores de uma planilha de excel e joga no meu banco de dados.
Porém eu queria que ele pegasse os valores desta planilha de excel e jogasse para o meu banco de maneira já formatada.
Por exemplo:
modulo.cds_bombasHP.value := MSExcel.ActiveSheet.Range['AB' + IntToStr(i)].Value;
O comando acima irá por exemplo me retornar um valor como : 146,488. Eu queria que ele aproximasse e jogasse no meu banco do valor arredondado 147,5 Sempre com uma casa depois da vírgula.
O campo em minha tabela é Float.
Obrigado pela atenção
Abraços
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.