Verificação de valor de String

gente, tem alguém disposto a ajudar de novo a anta velha aqui?

É o seguinte, to fazendo uma classe pra calcular inscrições estaduais, e to precisando fazer a seguinte comparação:

		if ((strInscricao>="03000001")&&(strInscricao<="03017000")){
			p = 5;
			d = 0;
		}else if((strInscricao)>="03017001"&&(strInscricao<="03019022"){
			p = 9;
			d = 1;
		}else if(strInscricao>="03019023"){
			p = 0;
			d = 0;
		}

O problema é, ele não faz a comparação. Tentei converter para número mas to apanhando.
Alguém tem idéia do que devo fazer?

tenta assim:

int i = Integer.parseInt(strInscricao);

assim tu vai converter a string em int;

falow!!!

humm…

vc pode…

  1. Se quiser comparar as Strings : usar o método equals e o método compareTo da classe String.

2)Se for só comparar os números em sí então use : Integer.parseInt() e compare como se fossem inteiros mesmo

Espero ter ajudado

[]s

Exato se for numero == se for String , como estou vendo que é use equals

Mas todos os números vão ser iguais??? 8O

O problema é o seguinte:

dentro de uma determinada faixa de inscrições, defino determinados valores para alguns parâmetros.

Já tentei converter para int, mas acima do valor 03019022 dá pau, pq é superior ao valor que a variável do tipo int é capaz de suportar.

Sacaram o lance da coisa?

[quote=“rashi”]O problema é o seguinte:

dentro de uma determinada faixa de inscrições, defino determinados valores para alguns parâmetros.

Já tentei converter para int, mas acima do valor 03019022 dá pau, pq é superior ao valor que a variável do tipo int é capaz de suportar.

Sacaram o lance da coisa?[/quote]

Cara explique mais detalhadamente para entendermos o expirito da coisa, porque ainda não entendi :oops:

P D, são o que ??? as faixas??

beleza, vou explicar

a verificação de inscrição estadual é do Amapá e ela, como as outras, segue regrinhas às vezes bem chatinhas :slight_smile:

nesse caso em particular, além do famoso “multiplica por peso, soma tudo e tasca módulo 11”, quem já fez rotina de cálculo de CPF já sacou o lance, tem ainda outra questão.

De acordo com o número de inscrição estadual da firma, são definidas duas variáveis adicionais.

Por isso tenho que testar a faixa.
Se o número da inscrição estiver compreendido entre “03000001” e “03017000”, a variável p vale 5
se o número estiver entre “03017001” e “03019022”, a variável p é 9
acima de “03019023” é 0.

pois bem, o número da inscrição é do tipo String, e eu preciso verificar se este número está dentro de uma destas faixas acima.

Por exemplo, a inscrição “03012345” estaria na primeira faixa.
Só que eu não posso usar >= ou <= com strings, certo?

Tentei converter esses números para inteiro, inclusive a inscrição, para trabalhar então com a comparação de números. Só que determinados números de inscrição extrapolam o limite da variável do tipo int. Se eu tento converter a string “03019022” para inteiro, dá erro, pq o número é grande demais.

Acho que dá pra usar outro tipo de variável, talvez long, ou algo parecido, mas não estou conseguindo fazer a conversão.

OK, se vc quiser continuar comparando string, faça o mais ou menos isso

String nome=&quot;03017001&quot;;
if&#40;nome.substring&#40;7&#41;.equals&#40;&quot;0&quot;&#41;&#41;&#123;
P=&quot;algo&quot;;
&#125;
else if&#40;nome.substring&#40;7&#41;.equals&#40;&quot;1&quot;&#41;&#41;&#123;&#41;&#123;
P=&quot;outro&quot;
&#125;

Basta olhar que substring muda o resultado e colocar o numero dela!"!
Mas trabalhar com números é melhor!! Falow!!

pra cnverter pra long eh assim:

long num = Long.parseLong(str);

eh do mesmo jeito pra todos os tipos primitivos numericos:

double num = Double.parseDouble(str);
float num = Float.parseFloat(str);

e para usar numeros grandes de mais para long (o q n eh o caso, pos long vai de mais ou menos -9000000000000000000 ateh 9000000000000000000 (sendo 18 zeros 8O )) basta usar a classe BigInteger ou BigDecimal do pacote java.math, dai vc pode usar numeros de tamanho indeterminado (desde q tenha espaco suficiente na memoria pra eles 8O ), mas o prob eh q o desempenho eh sacrificado…

ex:
BigInteger num = new BigIneteger(str);

e pra fazer operacoes matematicas vc utiliza metodos como

num.divite(new BigInteger(str2));

para mais informacoes sobre estas classes veja a java api :wink:

espero ter ajudado :smiley:

Valeu Felipe

A conversão funcionou direito. Mas o bendito IF continua tirando meu sono. Será que tem alguma regrinha que num tô sabendo?

Fiz da seguinte forma:

long num = Long.parseLong&#40;strInscricao&#41;;
int p = 0;
int d = 0;

if &#40;&#40;num&gt;=03000001&#41;&amp;&amp;&#40;num&lt;=03017000&#41;&#41;&#123;
	p = 5;
	d = 0;
&#125;else if &#40;&#40;num&gt;=03017001&#41;&amp;&amp;&#40;03019022&#41;&#41;&#123;
	p = 9;
	d = 1;
&#125;else if &#40;num&gt;=03019023&#41;&#123;
	p=0;
	d=0;
&#125;

Mas quando vou rodar o erro que dá é:

integer number too large&#58; 03019022
&#125;else if &#40;&#40;num&gt;=03017001&#41;&amp;&amp;&#40;03019022&#41;&#41;&#123;
                                             ^

Cara só um pequeno detalje para terminar , no ultimo tenque ser só else
vc colocou else if, no final coloque else…Veja se os numeros , não estão maiores que inteiro!! Falow :lol:

o problema é que os números são maiores que inteiro :confused:

putz, vou ter que descobrir uma forma de fazer essa comparação.

Como é que o povo faz quando dá de cara com um troço desse?

Depois do número coloque um L, pra forcar a ser long, tipo assim:

999999999999999L

Acho q isso funciona, se não funcionar converte os dois para float/double e faz a comparacao

Não se esqueca que em java, um número que começe com zero é tratado no formato octal e não decimal.

010 = formato octal (é igual a 8 em decimal)
10 = formato decimal

gente, que eu lembre ontem tinha mais mensagens nesse tópico.

pra onde será que foram?

Seguinte, consegui resolver com o L no final. Só depois que fui ver o lance do octal.

Valeu gente.
Espero conseguir aprender Java um dia :slight_smile: