Conversão de Valores - Double/JSP

15 respostas
E

Pessoal,
Bom Dia

Estou tentando converter um valor String do meu List para Double no meu jsp.
Fiz assim: (desse jeito não dá certo).
Double.parseDouble(listResumo.get(1).getSoma());

Esta errado o que eu estou fazendo? Precisa importar algum pacote para o meu jsp?

Li um post aqui no guj falando que double não tem precisão, e estou converterndo valores monetários. Se double é mesmo sem precisão, qual tipo então devo usar?

15 Respostas

renamed

Está dando algum erro ou simplesmente não funciona?

A

Que erro que está dando ? É Exception ?
Coloca o os detalhes pra gente poder te ajudar .

E

O problema é que eu fazia assim:

Double.parseDouble(listResumo.get(1).getSoma());

E não sei porque mas não pode especificar o 1… fiz um for e fiz assim:

Double.parseDouble(listResumo.get(iR).getSoma());

Mas agora estou com outro problema, tento converter a String com o valor 22424576.24 e o valor vira 2.242457624E7

A

Manda o for inteiro !
E coloca a exception que está ocorrendo também…
O 1 não influencia em nada. Ele apenas faz referencia ao elemento de uma determinada posição do ArrayList.

[]'s !

renamed

Ellensmp:

Mas agora estou com outro problema, tento converter a String com o valor 22424576.24 e o valor vira 2.242457624E7

Ele esta transformando corretamente, se você prestar atenção ele pegou 22424576.24 e transformou em notação científica 2.242457624 * 10(elevado a 7)

ok?

juniormaverick

Ellensmp, utiliza bigdecimal em vez de double que resolve seu problema. Veja o exemplo abaixo.

public class ExemploBigDecimal {
	public static void main(String[] args) {
		String valor = "22424576.24";
		
		BigDecimal b = new BigDecimal(valor);
		System.out.println(b);
	}
}
E

Artur Drummond:
Manda o for inteiro !
E coloca a exception que está ocorrendo também…
O 1 não influencia em nada. Ele apenas faz referencia ao elemento de uma determinada posição do ArrayList.

[]'s !

Sim…mas quando o coloco dá erro… dentro ou fora do for da erro.
Quando eu coloco a variável é de boa… vai certinho.

E
juniormaverick:
Ellensmp, utiliza bigdecimal em vez de double que resolve seu problema. Veja o exemplo abaixo.
public class ExemploBigDecimal {
	public static void main(String[] args) {
		String valor = "22424576.24";
		
		BigDecimal b = new BigDecimal(valor);
		System.out.println(b);
	}
}

Como utilizo isso em meu JSP???

É melhor eu fazer isso em meu jsp ou na classe?

A

Ellen … a gente precisa saber primeiro qual erro que está dando. Coloca o nome da exception e depois o código jsp pra gente…

juniormaverick

Cara, como você está pegando esta informação???
Se você está utilizando um model basta pegar o valor da variável que já foi setada no model, e realizar a conversão.

Faz o que o Artur Drummond, coloca o erro que está ocorrendo, a jsp, tudo que for possível.

E

juniormaverick:
Cara, como você está pegando esta informação???
Se você está utilizando um model basta pegar o valor da variável que já foi setada no model, e realizar a conversão.

Faz o que o Artur Drummond, coloca o erro que está ocorrendo, a jsp, tudo que for possível.

Estou pegando este valor de uma query.

Não esta dando exception mais… somente qndo colocao numero 1 naquele indice do list.

E

juniormaverick:
Cara, como você está pegando esta informação???
Se você está utilizando um model basta pegar o valor da variável que já foi setada no model, e realizar a conversão.

Faz o que o Artur Drummond, coloca o erro que está ocorrendo, a jsp, tudo que for possível.

quando coloco o 1 como indice e nao uma variavel ele dá o seguinte erro:

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: Exception in JSP: /dhtml-suite-for-applications/demos/demo-tabs-2.jsp:137

134: 					
135: 					for(int iR=0;iR<listResumo.size();iR++) {
136: 					//int iR = 1;
137: 					double a = Double.parseDouble(listResumoC.get(1).getSomaC());
138: 				%>
139:                 <tr>
140:                     <td>A iniciar</td>


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	control.Processos.doGet(Processos.java:100)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


root cause 

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
	java.util.ArrayList.RangeCheck(ArrayList.java:547)
	java.util.ArrayList.get(ArrayList.java:322)
	org.apache.jsp.dhtml_002dsuite_002dfor_002dapplications.demos.demo_002dtabs_002d2_jsp._jspService(demo_002dtabs_002d2_jsp.java:202)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	control.Processos.doGet(Processos.java:100)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.28 logs.
juniormaverick

Ellensmp, agora acho que resolvemos, é o seguinte.

Você falou que utiliza uma query para buscar o registros, quando você colocar o numero 1 dá problema porque a query consultada retornou apenas um unico registro para o seu List. Qualquer list começa a partir do indice 0, se sua query retornou um list com apenas um unico registro o indice deste registro será zero, sendo assim quando você coloca o numero 1 dá problema porque não existe registro com este índice.

Já no caso da variável dá certo, pelo fato da variável começar no indice zero e percorrer apenas os índices existentes que no caso é até que seja menor que o tamanho da lista.

Veja o exemplo, onde coloquei 0 em vez de 1. A maneira correta é utilizar a variável em vez dos números.

import java.math.BigDecimal;
import java.util.ArrayList;

public class ExemploBigDecimal {
	public static void main(String[] args) {
		ArrayList<String> listResumo = new ArrayList<String>();
		// Se colocar o ZERO irá pegar apenas este registro abaixo
		listResumo.add("22424576.24");
		
		// Se colocar o UM irá pegar apenas este registro abaixo
		listResumo.add("4576.22");
		
		// Se colocar o DOIS irá pegar apenas este registro abaixo
		listResumo.add("444576.21");
		
		for(int iR=0; iR < listResumo.size(); iR++) {  
			// Se colocar a variável irá pegar todos os registros consultados e que estão no list
			BigDecimal b = new BigDecimal(listResumo.get(0));
			System.out.println(b);
		}
		
	}
}

Entendeu???

E

juniormaverick:
Ellensmp, agora acho que resolvemos, é o seguinte.

Você falou que utiliza uma query para buscar o registros, quando você colocar o numero 1 dá problema porque a query consultada retornou apenas um unico registro para o seu List. Qualquer list começa a partir do indice 0, se sua query retornou um list com apenas um unico registro o indice deste registro será zero, sendo assim quando você coloca o numero 1 dá problema porque não existe registro com este índice.

Já no caso da variável dá certo, pelo fato da variável começar no indice zero e percorrer apenas os índices existentes que no caso é até que seja menor que o tamanho da lista.

Veja o exemplo, onde coloquei 0 em vez de 1. A maneira correta é utilizar a variável em vez dos números.

import java.math.BigDecimal;
import java.util.ArrayList;

public class ExemploBigDecimal {
	public static void main(String[] args) {
		ArrayList<String> listResumo = new ArrayList<String>();
		// Se colocar o ZERO irá pegar apenas este registro abaixo
		listResumo.add("22424576.24");
		
		// Se colocar o UM irá pegar apenas este registro abaixo
		listResumo.add("4576.22");
		
		// Se colocar o DOIS irá pegar apenas este registro abaixo
		listResumo.add("444576.21");
		
		for(int iR=0; iR < listResumo.size(); iR++) {  
			// Se colocar a variável irá pegar todos os registros consultados e que estão no list
			BigDecimal b = new BigDecimal(listResumo.get(0));
			System.out.println(b);
		}
		
	}
}

Entendeu???

Realmente… vc estava certo, começa com 0 mesmo!!!

E

juniormaverick:
Ellensmp, agora acho que resolvemos, é o seguinte.

Você falou que utiliza uma query para buscar o registros, quando você colocar o numero 1 dá problema porque a query consultada retornou apenas um unico registro para o seu List. Qualquer list começa a partir do indice 0, se sua query retornou um list com apenas um unico registro o indice deste registro será zero, sendo assim quando você coloca o numero 1 dá problema porque não existe registro com este índice.

Já no caso da variável dá certo, pelo fato da variável começar no indice zero e percorrer apenas os índices existentes que no caso é até que seja menor que o tamanho da lista.

Veja o exemplo, onde coloquei 0 em vez de 1. A maneira correta é utilizar a variável em vez dos números.

import java.math.BigDecimal;
import java.util.ArrayList;

public class ExemploBigDecimal {
	public static void main(String[] args) {
		ArrayList<String> listResumo = new ArrayList<String>();
		// Se colocar o ZERO irá pegar apenas este registro abaixo
		listResumo.add("22424576.24");
		
		// Se colocar o UM irá pegar apenas este registro abaixo
		listResumo.add("4576.22");
		
		// Se colocar o DOIS irá pegar apenas este registro abaixo
		listResumo.add("444576.21");
		
		for(int iR=0; iR < listResumo.size(); iR++) {  
			// Se colocar a variável irá pegar todos os registros consultados e que estão no list
			BigDecimal b = new BigDecimal(listResumo.get(0));
			System.out.println(b);
		}
		
	}
}

Entendeu???

Como faço pra o BigDecimal ter somente duas casas decimais?

Criado 6 de novembro de 2009
Ultima resposta 6 de nov. de 2009
Respostas 15
Participantes 4