ZaP
{ USER }
posts: 1
last: 08-Nov-2007
TITLE: Java String Utility
DESCRIPTION: Demonstrates the proper use of Number Formats in common java programming scenarios
Submitted: 08-Nov-2007 23:30:01 ( 1yrs 8w 4d 7h ago ) Language: Java (*.java)
Views: 242 Lines of Code: 112 LINES
Rating:
rate: star1
star2
star3
star4
star5
dstar1
dstar2
dstar3
dstar4
dstar5  ( rated! )
  { 3.00 / 5 }
Difficulty: Intermediate
Bookmark
/*
 * NumberUtility.java
 *
 *  Source:  http://www.freejavaguide.com  
 */

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

/**
 * Class provides common functions on number formats.
 */

public class NumberUtility {
	
    /**
     * Method takes Object as parameter and returns decimal number.
     * if argument is float or double and contains tailing zeros
     * it removes them. If argument is float or double then no change in return type.
     * Change the Format of the Number by changing the String Pattern
     */
    public static String changeToDecimalFormat(Object number) {

        BigDecimal bdNumber = new BigDecimal(number.toString());
        bdNumber = bdNumber.stripTrailingZeros();           //Returns a BigDecimal with any trailing zero's removed
        String pattern = "###,##0.0###########";		//To apply formatting when the number of digits in input equals the pattern
        DecimalFormat newFormat = new DecimalFormat(pattern, new DecimalFormatSymbols(Locale.US));
        return newFormat.format(bdNumber);

    }

    /* Method takes Object as parameter and removes commas from the parameter */
    public static double removeCommasFromNumber(Object number) {
        try {
            StringBuffer inputNo = new StringBuffer(number.toString());
            if (inputNo.length() > 0) {
                while (inputNo.indexOf(",") != -1) {
                    inputNo.deleteCharAt(inputNo.indexOf(","));
                }
            } else {
                return 0.0;
            }
            return Double.parseDouble(inputNo.toString());

        } catch (NumberFormatException e) {
            return 0.0;
        }
    }

    /* Some times its required to have a fixed set of decimal places for a 
     * number. We can set that by changing the precision number for a particular
     * input BigDecimal Input String
     */
    public static String changeToRequiredDecimals(String bigDecimalString,
            int precision) {
        String newFormattedString = null;
        String afterDecimal = null;
        if (bigDecimalString == null || bigDecimalString.length() == 0) {
            return "0.0";
        }
        if (bigDecimalString.contains(".")) {
            afterDecimal = bigDecimalString.substring(bigDecimalString
                    .indexOf(".") + 1);
            int length = Math.abs((afterDecimal.length() - precision));
            if (afterDecimal.length() < precision) {
                newFormattedString = bigDecimalString;
                for (int i = 0; i < length; i++) {
                    newFormattedString = newFormattedString + "0";
                }
            } else if (afterDecimal.length() > precision) {
                newFormattedString = bigDecimalString.substring(0,
                        bigDecimalString.length() - length);
                if (precision == 0) {
                    newFormattedString = newFormattedString.substring(0,
                            newFormattedString.indexOf("."));
	            } else {
	                newFormattedString = bigDecimalString;
	            }

	        } else {
		            if (precision > 0)
		                newFormattedString = bigDecimalString + ".";
		            else
		                newFormattedString = bigDecimalString;
		            for (int i = 0; i < precision; i++) {
		                newFormattedString = newFormattedString + "0";
		            }
	        }
        }
        return newFormattedString;
    }

    public static void main(String args[]){
    	int intVar = 10;
    	double doubleVar = 10.504000;
    	float floatVar = 343534534348.5687654F;
    	String commaString = "343,534,535,000.0";
    	BigDecimal bdNumber = new BigDecimal("1234.8765");
    	
    	
    	System.out.println(NumberUtility.changeToDecimalFormat(new Integer(intVar)));
    	System.out.println(NumberUtility.changeToDecimalFormat(new Double(doubleVar)));
    	System.out.println(NumberUtility.changeToDecimalFormat(new Float(floatVar)));
    	
    	System.out.println(NumberUtility.removeCommasFromNumber(commaString));
    	
    	System.out.println(NumberUtility.changeToRequiredDecimals(bdNumber.toString(), 8));
	
    }
}