/*
*
* Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute
- Graduate School and Research in Engineering.
* See the file license.txt for copyright permission.
*
*/
package util;
public class Numeric {
/**
* Dados dois numeros double, faz a divisao dos mesmos.
* Depois soma a variavel aproximacao (ex: 0.999 se quiser arredondamento ate 3 casas decimais)
* Retorna o proprio resultado da divisao, caso nao haja parte fracionaria. Caso contrario
* retorna o proximo inteiro maior(ou para o proximo inteiro mais negativo, caso seja negativo).
*
* Caso o numerador ou denominador sejam 0, ele retorna 0
*
* Ex:
* Dadas a producao e o tamanho do lote, retorna o numero de lotes arredondando
*para o proximo inteiro no caso de haver decimais, ou considerando o proprio
*resultado da divisao quando este for divisivel pelo tamanho do lote
* @param numerador
* @param denominador
* @param aproximacao
* @return
*/
public static int resultadoDivisaoInteira(double numerador, double denominador, double aproximacao){
if(denominador == 0)
return 0;
double resp = (numerador / denominador);
if(numerador != 0)
if(resp < 0)
resp -= aproximacao;
else
resp += aproximacao;
return (int)(resp);
}
/**
* Dados dois numeros double, faz a divisao dos mesmos.
* Depois soma a variavel aproximacao (ex: 0.999 se quiser arredondamento ate 3 casas decimais)
* Retorna o proprio resultado da divisao, caso nao haja parte fracionaria. Caso contrario
* retorna o proximo inteiro maior(ou para o proximo inteiro mais negativo, caso seja negativo).
*
* Caso o numerador ou denominador sejam 0, ele retorna 0
*
*
* Utiliza o valor de aproximacao = 0.999
*
* Ex:
* Dadas a producao e o tamanho do lote, retorna o numero de lotes arredondando
*para o proximo inteiro no caso de haver decimais, ou considerando o proprio
*resultado da divisao quando este for divisivel pelo tamanho do lote
* @param numerador
* @param denominador
* @param aproximacao
* @return
*/
public static int resultadoDivisaoInteira(double numerador, double denominador){
return resultadoDivisaoInteira(numerador, denominador, 0.999);
}
/**
* Dados dois numeros double, faz a multiplicacao dos mesmos.
* Depois soma a variavel aproximacao (ex: 0.999 se quiser arredondamento ate 3 casas decimais)
* Retorna o proprio resultado da multiplicacao, caso nao haja parte fracionaria. Caso contrario
* retorna o proximo inteiro maior(ou para o proximo inteiro mais negativo, caso seja negativo).
*
* Caso o x ou y sejam 0, ele retorna 0
*
* Ex:
* Dadas a producaodiariaEmLotes e o NumDiasUteis, retorna a producao em lotes arredondando
* para o proximo inteiro no caso de haver decimais, ou considerando o proprio
* resultado da multiplicacao em caso contrario
* @param x
* @param y
* @param aproximacao
* @return
*/
public static int resultadoMultiplicacaoInteira(double x, double y, double aproximacao){
if(x == 0 || y == 0)
return 0;
double resp = (x * y);
if(resp < 0)
resp -= aproximacao;
else
resp += aproximacao;
return (int)(resp);
}
/**
* Dados dois numeros double, faz a multiplicacao dos mesmos.
* Depois soma a variavel aproximacao (ex: 0.999 se quiser arredondamento ate 3 casas decimais)
* Retorna o proprio resultado da multiplicacao, caso nao haja parte fracionaria. Caso contrario
* retorna o proximo inteiro maior(ou para o proximo inteiro mais negativo, caso seja negativo).
*
* Caso o x ou y sejam 0, ele retorna 0
*
* Utiliza o valor de aproximacao = 0.999
*
* Ex:
* Dadas a producaodiariaEmLotes e o NumDiasUteis, retorna a producao em lotes arredondando
* para o proximo inteiro no caso de haver decimais, ou considerando o proprio
* resultado da multiplicacao em caso contrario
* @param x
* @param y
* @param aproximacao
* @return
*/
public static int resultadoMultiplicacaoInteira(double x, double y){
return resultadoMultiplicacaoInteira(x, y, 0.999);
}
}