Ir para conteúdo
Fórum Script Brasil
  • 0

Como arrendondar valor float ?


Silva_henry

Pergunta

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

  • 0
146,488. Eu queria que ele aproximasse e jogasse no meu banco do valor arredondado 147,5

Você 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 por Duduh_Capixaba
Link para o comentário
Compartilhar em outros sites

  • 0

Eu quis dizer 146,5 mesmo,rsrs,me desculpe.

Uso Banco firebird

O 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...

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Diego de Souza Silva
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

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 resultado

De qualquer forma muito Obrigado pelas informações!

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Duduh_Capixaba
Link para o comentário
Compartilhar em outros sites

  • 0

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 por Duduh_Capixaba
Link para o comentário
Compartilhar em outros sites

  • 0

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ção

function 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

Link para o comentário
Compartilhar em outros sites

  • 0
Problemas,rsrs

Eu 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 String

Obs : O campo ALT da tabela é float

você já tentou assim ó:

modulo.cds_bombasALT.value := Formatfloat('###.#',StrToFloat(MSExcel.ActiveSheet.Range['AC' + IntToStr(i)].Value));

Editado por Diego de Souza Silva
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...