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…
- 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 
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="03017001";
if(nome.substring(7).equals("0")){
P="algo";
}
else if(nome.substring(7).equals("1")){){
P="outro"
}
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 
espero ter ajudado 
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(strInscricao);
int p = 0;
int d = 0;
if ((num>=03000001)&&(num<=03017000)){
p = 5;
d = 0;
}else if ((num>=03017001)&&(03019022)){
p = 9;
d = 1;
}else if (num>=03019023){
p=0;
d=0;
}
Mas quando vou rodar o erro que dá é:
integer number too large: 03019022
}else if ((num>=03017001)&&(03019022)){
^
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 
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 