Transformação de Strings

8 respostas
J

Olá pessoal,

Eu estou transformando números de um formato para outro, só que estou fazendo tudo na mão, o que tá me custando muito tempo.

O algoritmo é o seguinte, tenho um numero nesse formato:

0.062358133494854

1º passo: retirar o ponto

0062358133494854

2º passo: comparar o numero resultante com o tamanho desejado, se for maior deslocar a virgula para a esquerda, resultando em:

6235813349485,40

Se igual:

623581334948,54

Se menor, acrescenta-se zeros até alcançar o desejado:

62358133494854,00

Detalhe: deve sempre sobrar 2 casas decimais, nem mais, nem menos.

Senhores, não existe lógica matemática por trás disso. A ideia é transformar um numero em outro. Tenho feito isso utilizando operações para String mas está muito trabalhoso porque não sei exatamente como deslocar a virgula. Estou deslocando usando operações matemáticas, convertendo a String pra double e dividindo por 10^x para deslocar a virgula. Só que esse processo tá me dando muita dor de cabeça com as aproximações a linguagem faz naturalmente. O ideal seria fazer tudo com String, então vim aqui em busca de ideias.

Voces podem me ajudar?

8 Respostas

Rodrigo_Sasaki

Por que não usa um StringBuilder? public static void main(String[] args){ StringBuilder sb = new StringBuilder("0062358133494854"); sb.insert(sb.length()-2, ","); System.out.println(sb.toString()); }

J

Não conhecia o StringBuilder. Vou tentar e trago um feedback.

Abcos

J

A solução foi ótima digaoneves, obrigado.

Porém não estou entendendo o porque disso aqui estar acontecendo. Quero remover todo e qualquer zero que estiver no inicio do meu numero, então fiz:

while(numeroSemPonto.startsWith("0")){
									builder.deleteCharAt(0);
									
								}

O problema é que mesmo depois de remover o zero do inicio do numero, o loop continua. O porque disso?

Rodrigo_Sasaki

quem é numeroSemPonto? você não altera ele, então se esse teste retorna true, sempre retornará.

S

Você poderia colocar um System.out.println(); no seu while para ver o que ele está fazendo.

J

Eu imaginei que passando ele no construtor do StringBuilder faria referencia. Falha minha.

Resolvi da seguinte forma

tiraPonto = auxvet[1].split("\\.");
numeroSemPonto = tiraPonto[1];

StringBuilder builder = new StringBuilder(numeroSemPonto);

builder.insert(builder.length()-1, ",");
builder.insert(builder.length(), "0");
								
	while(numeroSemPonto.startsWith("0")){
			builder.deleteCharAt(0);
			numeroSemPonto = builder.toString();
								}

Obrigado digaoneves.

Rodrigo_Sasaki

Não fica melhor verificando diretamente no StringBuilder?if(builder.charAt(0) == '0'){ builder.deleteCharAt(0); }

J

Fica sim :smiley:

Criado 2 de outubro de 2012
Ultima resposta 2 de out. de 2012
Respostas 8
Participantes 3