/*
* Copyright (c) 2003 - 2007 OpenSubsystems s.r.o. Slovak Republic. All rights reserved.
*
* Project: OpenSubsystems
*
* $Id: NumberUtils.java,v 1.9 2007/01/07 06:14:01 bastafidli Exp $
*
* 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; version 2 of the License.
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.text.NumberFormat;
/**
* Collection of useful utilities to work with numbers.
*
* @version $Id: NumberUtils.java,v 1.9 2007/01/07 06:14:01 bastafidli Exp $
* @author Peter Satury
* @code.reviewer Miro Halas
* @code.reviewed Initial revision
*/
public final class NumberUtils
{
// Constants ////////////////////////////////////////////////////////////////
/**
* Static array used to append leading 0 chars to file name constructed from
* number.
*/
protected static final char[] ZEROCHARS = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
};
// Cached values ////////////////////////////////////////////////////////////
/**
* static Number format for no Exponent
*/
public static final NumberFormat NFFORMAT;
/**
* static Number format for no Exponent for editing
*/
public static final NumberFormat NFFORMATEDIT;
/**
* static Number format for Currency
*/
public static final NumberFormat NFCURRENCYFORMAT;
/**
* static Number format for Currency for editing
*/
public static final NumberFormat NFCURRENCYFORMATEDIT;
// Constructors /////////////////////////////////////////////////////////////
/**
* Static initializer.
*/
static
{
NFFORMAT = NumberFormat.getNumberInstance();
NFFORMAT.setMaximumFractionDigits(20);
NFFORMATEDIT = NumberFormat.getNumberInstance();
NFFORMATEDIT.setMaximumFractionDigits(20);
NFFORMATEDIT.setGroupingUsed(false);
NFCURRENCYFORMAT = NumberFormat.getNumberInstance();
NFCURRENCYFORMAT.setMaximumFractionDigits(2);
NFCURRENCYFORMAT.setMinimumFractionDigits(2);
NFCURRENCYFORMATEDIT = NumberFormat.getNumberInstance();
NFCURRENCYFORMATEDIT.setMaximumFractionDigits(2);
NFCURRENCYFORMATEDIT.setMinimumFractionDigits(2);
NFCURRENCYFORMATEDIT.setGroupingUsed(false);
}
/**
* Private constructor since this class cannot be instantiated
*/
private NumberUtils(
)
{
// Do nothing
}
// Public methods ///////////////////////////////////////////////////////////
/**
* Method to make Exponention
*
* @param iBbase - base of Exponention [1..]
* @param iExponent - exponent of Exponention [0..14]
* @return long - result of Exponention
* @throws IllegalArgumentException - in case of arguments out of valid range
*/
public static long exponentiate(
int iBbase,
int iExponent
) throws IllegalArgumentException
{
if (iExponent > 14 || iExponent < 0)
{
throw new IllegalArgumentException(
"Exponent could not be greater then 14 and lower then 0");
}
if (iBbase < 1)
{
throw new IllegalArgumentException(
"Exponentiate base could not be lower then 1");
}
long lReturn = 1;
for (int iCounter = 0; iCounter < iExponent; iCounter++)
{
try
{
lReturn = lReturn * iBbase;
}
catch (Exception eExc)
{
throw new IllegalArgumentException(
"Exponentiate arguments too high");
}
}
return lReturn;
}
/**
* Method to make specified length digit number string representation from particular
* input number.
* For example, if there will be send input number 32 and digit lenhth = 8, output
* will be string '00000032'
*
* @param iInputNumber - input number that will be converted into 8 digit number
* string representation
* @param iDigitLength - length of the output digit number string
*
* @return String - digit number string representation
*/
public static String getDigitNumberString(
int iInputNumber,
int iDigitLength
)
{
StringBuffer idString = new StringBuffer(Integer.toString(iInputNumber));
if (iDigitLength - idString.length() > 0)
{
idString.insert(0, ZEROCHARS, 0, iDigitLength - idString.length());
}
return idString.toString();
}
}