/*
* Copyright (C) 2015 Allsoft
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package br.com.allsoft.avros.formulas;
import br.com.allsoft.avros.exceptions.ValorInvalidoMoedaException;
import java.text.DecimalFormat;
/**
* Classe para fazer cálculos envolvendo dinheiro.
*
* @author Luana Nascimento
*/
public class Moeda {
/**
* Calcula a o preço das sessões a partir de uma String com o valor total.
*
* @param valor String com o valor total do orçamento
* @param sessoes número de sessões
* @return valor de cada sessão no formato R$ 0,00
* @throws ValorInvalidoMoedaException caso a String valor contenha
* caracteres que não são números nem ' ', '.', ',', 'R', 'S' ou '$'
*/
public static String calculaSessao(String valor, int sessoes) throws ValorInvalidoMoedaException{
valor = valor.replace(",", ".");
valor = valor.replace("R", "");
valor = valor.replace("$", "");
valor = valor.replace("S", "");
valor = valor.replace(" ", "");
if((!valor.matches(".*\\d.*")) && (!valor.matches("."))){
throw new ValorInvalidoMoedaException();
}
//para poder armazenar o valor em forma de double,
//trocamos as virgulas por ponto (padrão americano de moeda)
double dvalor = Double.parseDouble(valor);
//para facilitar a visualização do valor, trocamos
//novamente os pontos por virgula (padrão brasileiro
DecimalFormat df = new DecimalFormat("0.00");
String sessao = df.format(dvalor / sessoes);
sessao = sessao.replace(".", ",");
return "R$ " + sessao;
}
/**
* Calcula a o preço das sessões a partir de um double com o valor total.
*
* @param valor double com o valor total do orçamento
* @param sessoes número de sessões
* @return valor de cada sessão no formato R$ 0,00
*/
public static String calculaSessao(double valor, int sessoes){
//para facilitar a visualização do valor, trocamos
//os pontos por virgula (padrão brasileiro
DecimalFormat df = new DecimalFormat("0.00");
String sessao = df.format(valor / sessoes);
sessao = sessao.replace(".", ",");
return "R$ " + sessao;
}
/**
* Converte um valor para o padrão brasileiro de moedas a
* partir de um double.
*
* @param valor double com o valor a ser convertido
* @return valor no padrão brasileiro R$ 0,00
*/
public static String padraoBr(double valor){
//para facilitar a visualização do valor, trocamos
//os pontos por virgula (padrão brasileiro
DecimalFormat df = new DecimalFormat("0.00");
String br = df.format(valor);
br = br.replace(".", ",");
return "R$ " + br;
}
/**
* Pega uma String com um valor (com ou sem prefixo) e retorna
* um valor no formato brasileiro de moeda.
* @param valor String com o valor a ser convertido
* @return valor no formato R$ 0,00
* @throws ValorInvalidoMoedaException caso a String valor contenha
* caracteres que não são números nem ' ', '.', ',', 'R', 'S' ou '$'
*/
public static String padraoBr(String valor) throws ValorInvalidoMoedaException{
valor = valor.replace(",", ".");
valor = valor.replace("R", "");
valor = valor.replace("$", "");
valor = valor.replace("S", "");
valor = valor.replace(" ", "");
if((!valor.matches(".*\\d.*")) && (!valor.matches("."))){
throw new ValorInvalidoMoedaException();
}
//para poder armazenar o valor em forma de double,
//trocamos as virgulas por ponto (padrão americano de moeda)
double dvalor = Double.parseDouble(valor);
//para facilitar a visualização do valor, trocamos
//novamente os pontos por virgula (padrão brasileiro
DecimalFormat df = new DecimalFormat("0.00");
String br = df.format(dvalor);
br = br.replace(".", ",");
return "R$ " + br;
}
/**
* Converte um valor para o padrão brasileiro de moedas a
* partir de um double.
*
* @param valor double com o valor a ser convertido
* @return valor no padrão brasileiro 0,00
*/
public static String padraoVirgula(double valor){
//para facilitar a visualização do valor, trocamos
//os pontos por virgula (padrão brasileiro
DecimalFormat df = new DecimalFormat("0.00");
String br = df.format(valor);
br = br.replace(".", ",");
return br;
}
/**
* Pega uma String com um valor (com ou sem prefixo) e retorna
* um valor no formato brasileiro de moeda.
* @param valor String com o valor a ser convertido
* @return valor no formato 0,00
* @throws ValorInvalidoMoedaException caso a String valor contenha
* caracteres que não são números nem ' ', '.', ',', 'R', 'S' ou '$'
*/
public static String padraoVirgula(String valor) throws ValorInvalidoMoedaException{
valor = valor.replace(",", ".");
valor = valor.replace("R", "");
valor = valor.replace("$", "");
valor = valor.replace("S", "");
valor = valor.replace(" ", "");
if((!valor.matches(".*\\d.*")) && (!valor.matches("."))){
throw new ValorInvalidoMoedaException();
}
//para poder armazenar o valor em forma de double,
//trocamos as virgulas por ponto (padrão americano de moeda)
double dvalor = Double.parseDouble(valor);
//para facilitar a visualização do valor, trocamos
//novamente os pontos por virgula (padrão brasileiro
DecimalFormat df = new DecimalFormat("0.00");
String br = df.format(dvalor);
br = br.replace(".", ",");
return br;
}
/**
* Método que toma como parâmetro um valor monetário no formato R$ 0,00 e
* converte de volta para double
*
* @param valor no formato R$ 0,00.
* @return quantia representante em forma de double
* @throws ValorInvalidoMoedaException caso o parametro possua caracteres diferentes de números,
* 'R', 'S', '$', '.', ' ' e ','.
*/
public static double retornaDouble(String valor) throws ValorInvalidoMoedaException{
double retorno;
valor = valor.replace(",", ".");
valor = valor.replace("R", "");
valor = valor.replace("$", "");
valor = valor.replace("S", "");
valor = valor.replace(" ", "");
if((!valor.matches(".*\\d.*")) && (!valor.matches("."))){
throw new ValorInvalidoMoedaException();
}
//para poder armazenar o valor em forma de double,
//trocamos as virgulas por ponto (padrão americano de moeda)
retorno = Double.parseDouble(valor);
return retorno;
}
}