Arredondar números

13 respostas
Andre_Brito

Daí galera beleza?
Eu tenho uma variável double que, quando dá números com vírgula, ela deixa, por exemplo, 14,[telefone removido]. Teria como arredondar para um valor, tipo 14,67? Ou só deixar as duas casa depois da vírgula?

Obrigado!
André.

13 Respostas

rodrigo_gomes

Olá,

de uma lida aqui
http://java.sun.com/docs/books/tutorial/i18n/format/decimalFormat.html

Tem exemplos também.

[]´s

Andre_Brito

Ok, valeu cara!
Me surgiu uma dúvida também quanto a ArrayList. Eu posso diminuir o tamanho de uma variável ArrayList depois de já ter definido seu tamanho?

Raff

ArrayList é dinamico isso significa que sim cara… mas geralmente quando se cria um ArrayList não colocar um tamanho inicial para ele… Você não está se confundindo com []…(array).

public ArrayList<Integer> rafael = new ArrayList<Integer>();
rafael.add(15);
rafael.add(43);
rafael.remove(o);
rafael.remove(new Integer(43));

Espero ter ajudado

Raff

Note que eu disse que geralmente não se inicial um ArrayList com um valor inicial, não disse que não pode!!!

italo.vendrameto

Cara acho que vc está misturando as coisas objetos do tipo ArrayListão tem tamanho ficho, já array de objetos tem tamanho ficho, e eu “acho” que não da pata diminuir não.

Andre_Brito

Pois é.
Estou usando array normal (primitivo, o []). E precisava, em minha aplicação, diminuir o array conforme algumas operações são feitas. Gostaria de saber se eu terei de mudar meu array primitivo para ArrayList, ou Vector, sei lá.
Qual seria a melhor opção?

ViniGodoy

Mude para um List, pode ser o ArrayList.

Você poderia criar um array menor, e depois copiar os dados do antigo para o novo array com System.arrayCopy. Mas isso é mais trabalhoso e sujeito a erros do que usar a classe pronta.

Além do que, o ArrayList te fornece uma série de outras vantagens.

Andre_Brito

Você poderia criar um array menor, e depois copiar os dados do antigo para o novo array com System.arrayCopy. Mas isso é mais trabalhoso e sujeito a erros do que usar a classe pronta.

Pois é cara, mas o problema é que precisa ser no mesmo array. Eu não consigo ver uma maneira de usar outro array nessa minha aplicação. Acho melhor mesmo usar o ArrayList.

Mas agora, supondo que eu tenha um ArrayList de 20 posições chamado vetor. Se eu diminuir para 10 a quantidade de elementos, o vetor fica com 10 posições? Eu teria que usar o remove()? E ele não removeria somente os elementos, mas deixaria o tamanho?

O que estou intrincado é que eu não posso usar outro vetor no final. Somente a o vetor que fiz no construtor.
(Deixei em negrito porque é outra dúvida: caso eu tenha feito no construtor o tamanho do vetor, ainda assim posso mudar o tamanho do mesmo?)

Valeu!
Abraço!

Raff

Amigo eu acho que você está confundindo as coisas… Dê uma lida sobre ArrayList que você vai entender melhor… Sobre a sua pergunta se você tiver 20 elementos e remover 10 com o metodo remove() sim você excluirá esses dez… e seu ArrayList agora o tamanho dele é de 10 use o metodo size() para ver o tamanho do ArrayList depois que voce remover!!!
Abraços e dê uma lida sobre ArrayList… Ou melhor sobre a Interface List. :!:

ViniGodoy

Internamente a classe removeria os elementos e deixaria o tamanho. Métodos como size() vão te retornar a quantidade e elementos dentro do ArrayList, não o tamanho interno dele.

Não sei se existe uma forma de forçar a diminuição. Na classe Vector tem, mas daí vc tem a penalidade da sincronização.

Em todo caso, se tem que ser com array, crie um array menor, copie o conteúdo do antigo para esse array menor usando System.arraycopy e depois substituia o array antigo pelo novo. É a única forma de se fazer isso. Uma vez criado, o tamanho de um array é imutável.

Andre_Brito

Pois é. É bem isso que eu precisava. :smiley:
Só que na mesma variável, sabe?

Edit1: ViniGodoy, lembro que isso já gerou uma discussão aqui no fórum (discussão do bem :D).

Eu até pensei agora em fazer, por exemplo, um método com um novo array que recebe o seu tamanho menor do que o array principal. Só que, na hora de eu fazer

vetorOriginal = arrayNovo;

Daria certo isso? Quero dizer, o meu vetorOriginal ficaria com o tamanho do arrayNovo? Não tenho JVM aqui senão já testava, mas estou no pc de outro curso na faculdade.

Abraço.

Edit2
@Raff, eu li o JavaDoc da classe ArrayList, porém vejamos o que ela fala:

remove

public Object remove(int index)

Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).


Então vai remover o elemento especificado e vai trazer os outros para a esquerda, mas acho que não quer dizer que vai diminuir o tamanho do meu array.

Sobre a interface List eu teria que pegar um pouco mais de documentação, porque eu estou aprendendo interfaceS ainda. No caso, eu teria que implementar todos os métodos da interface, certo? (por ser uma interface). Teria como extender ela em vez de implementar? :stuck_out_tongue:
Grato.

ViniGodoy

Sö uma coisa… pq precisa ser um array primitivo e não pode ser um ArrayList?
E por que você precisa ser tão absolutamente econômico?

Você pode criar uma classe “MemoryEconomicList” que faça isso para vc. Extenda abstract list e encapsule o comportamento do array numa lista, fazendo as operações de cópia sempre que adicionar ou remover um objeto.

Andre_Brito

Desculpe-me se pareci econômico demais. Estou pensando mesmo em mudar de primitivo para ArrayList…
Amanhã (quinta-feira) a noite eu farei isso e postarei o resultado (se foi possível ou não). Não posso fazer antes por causa da faculdade.

Abraços e obrigado a todos.

Criado 16 de outubro de 2007
Ultima resposta 17 de out. de 2007
Respostas 13
Participantes 5