Olá,
estou com o seguinte problema, quero fazer uma limitação de valores em uma variavel, quero que ele somente mostre os dois valores depois do ponto, por exemplo: 000.00
Estou tentando fazer o mesmo com Substring, porem não estou achando a lógica certa p/ verificar se tem realmente os 2 valores depois do ponto, ou se tem o ponto.
Da maneira que esta meu código ele da o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.StringIndexOutOfBoundsException: String index out of range: 9
Na linha de código abaixo:
valordaVenda = valordaVenda.substring(0, X + 3);
Provavelmente o erro ocorre pq não deve ter 2 valores depois do ponto.
Estou fazendo da seguitne maneira abaixo:
//valorVenda é um bigdecimal que contem um valor, como por exemplo "100.10 ou 10 ou 100.1"
valordaVenda = valorVenda.toString();
//aqui setamos o contador com o tamanho da string
int cont = valordaVenda.length();
//percorremos a string
for(int X = 0; X<cont; X++){
//verificamos onde esta o . dentro da string
if(valordaVenda.charAt(X) == '.'){
//valordaVenda = valordaVenda.substring(0, X+3);
//substring(X, X+1).equals(".")){
//substring é o resultado de um pedaço da sua string original
if (valordaVenda.substring(X+1, valordaVenda.length()).length() == 0){
valordaVenda.concat("000");
} else if (valordaVenda.substring(X+1, valordaVenda.length()).length() == 1){
valordaVenda.concat("00");
} else if (valordaVenda.substring(X+1, valordaVenda.length()).length() == 2){
valordaVenda.concat("0");
}
//aqui pedimos para ele pegar o pedaço da strig que começa no 0
//e termina 3 casas a partir do . que ele achou
valordaVenda = valordaVenda.substring(0, X + 3);
break;
//tentei fazer da seguinte maneira abaixo mais não tive sucesso
// if (valordaVenda.substring(X, X + 2).equals("")) {
// Utils.msg("x+1:" + valordaVenda.substring(0, X + 1));
// valordaVenda = valordaVenda.substring(0, X + 1);
// break;
// } else if (valordaVenda.substring(X, X + 3).equals("")) {
//
// Utils.msg("x+2:" + valordaVenda.substring(0, X + 2));
// valordaVenda = valordaVenda.substring(0, X + 2);
// break;
// }else{
// Utils.msg("x+3:" + valordaVenda.substring(0, X + 3));
// valordaVenda = valordaVenda.substring(0, X + 3);
// break;
// }
}
}
[quote=wesleypc]Olá,
estou com o seguinte problema, quero fazer uma limitação de valores em uma variavel, quero que ele somente mostre os dois valores depois do ponto, por exemplo: 000.00
[/quote]
-
Que complicação - você pode usar DecimalFormat, ou então String.format ("%.2f"), com BigDecimal sem problemas.
-
Se realmente precisar de fazer uma coisa dessas, então crie um método separado. Evite fazer copy & pasta adoidado - ou você ganha por linha de código?
-
Você vai tomar na cabeça se tiver 2 variáveis com nomes ligeiramente parecidos (como valorVenda e valordaVenda) com tipos diferentes.
Se por algum motivo você precisa ter 2 variáveis com o mesmo valor mas tipos diferentes, use algo para diferenciá-las que seja padronizado, como um prefixo (embora, é claro, eu não seja a favor desse tipo de coisa). No seu caso, você pode usar “strValorVenda” para indicar que esse é o valor string da variável numérica “valorVenda”.)
Olá entanglement,
sera que vc poderia postar um exemplo de como ficaria com o DecimalFormat, ou então com o String.format ?
E como ficaria a verificação se tem valores depois do “.” ou não para que não ocorra o erro q esta dando: Exception in thread “AWT-EventQueue-0” java.lang.StringIndexOutOfBoundsException: String index out of range: 9
Grato pela ajuda.
package guj;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
public class FormatarCom2Casas {
public static void main(String[] args) throws Exception {
BigDecimal valorVenda = new BigDecimal("-12345.678"); // você quer imprimir como "-12.345,68" (note o arredondamento)
DecimalFormat df;
String strValorVenda;
strValorVenda = String.format("%.2f", valorVenda);
System.out.println(strValorVenda); // resultado: -12345,68
strValorVenda = String.format("%(.2f", valorVenda);
System.out.println(strValorVenda); // resultado: (12345,68)
strValorVenda = String.format("%,.2f", valorVenda);
System.out.println(strValorVenda); // resultado: -12.345,68
strValorVenda = String.format("%(,.2f", valorVenda);
System.out.println(strValorVenda); // resultado: (12.345,68)
strValorVenda = String.format(Locale.US, "%.2f", valorVenda);
System.out.println(strValorVenda); // resultado: -12345.68
strValorVenda = String.format(Locale.US, "%,.2f", valorVenda);
System.out.println(strValorVenda); // resultado: -12,345.68
strValorVenda = String.format(new Locale("pt", "BR"), "%.2f", valorVenda);
System.out.println(strValorVenda); // resultado: -12345,68
strValorVenda = String.format(new Locale("pt", "BR"), "%,.2f", valorVenda);
System.out.println(strValorVenda); // resultado: -12.345,68
df = (DecimalFormat) NumberFormat.getCurrencyInstance();
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: -R$ 12.345,68
df = new DecimalFormat ("0.##");
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: -12345,68
df = new DecimalFormat ("0.##", new DecimalFormatSymbols (Locale.US));
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: -12345.68
df = new DecimalFormat ("0.##", new DecimalFormatSymbols (new Locale ("pt", "BR")));
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: -12345,68
df = new DecimalFormat ("#,##0.##");
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: -12.345,68
df = new DecimalFormat ("#,##0.##", new DecimalFormatSymbols (Locale.US));
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: -12,345.68
df = new DecimalFormat ("#,##0.##;(#,##0.##)");
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: (12.345,68)
df = new DecimalFormat ("#,##0.##;(#,##0.##)", new DecimalFormatSymbols (Locale.US));
strValorVenda = df.format (valorVenda);
System.out.println(strValorVenda); // resultado: (12,345.68)
}
}
Muito obrigado entanglement , era realmente isso que eu queria, mato aquelas mil linhas q eu tinha por duas linha de código…
hahaha
Obrigadão mesmo.
[quote=wesleypc]Muito obrigado entanglement , era realmente isso que eu queria, mato aquelas mil linhas q eu tinha por duas linha de código…
hahaha
Obrigadão mesmo.[/quote]
Sem contar que por mais que você ficasse tentando, as 1000 linhas estariam erradas, já que o esperado é que arredonde o valor, não que trunque o valor.