Mega Code Archive

 
Categories / Java / Internationalization
 

Converts the double value to locale-independent string representation

/*******************************************************************************  * Copyright (c) 2004 Actuate Corporation.  * All rights reserved. This program and the accompanying materials  * are made available under the terms of the Eclipse Public License v1.0  * which accompanies this distribution, and is available at  * http://www.eclipse.org/legal/epl-v10.html  *  * Contributors:  *  Actuate Corporation  - initial API and implementation  *******************************************************************************/ /**  * Collection of string utilities.  *   */ public class StringUtil {   /**    * Converts the double value to locale-independent string representation.    * This method works like <code>Double.toString( double )</code>, and can    * also handle very large number like 1.234567890E16 to "12345678900000000".    *     * @param d    *            the double value to convert    * @param fNumber    *            the positive maximum fractional number    * @return the locale-independent string representation.    */   public static String doubleToString( double d, int fNumber )   {     if ( fNumber < 0 )       fNumber = 0;     String value = Double.toString( d );     int ePos = value.indexOf( 'E' );     int dotPos = value.indexOf( '.' );     // Convert the double like "1234567890000000.56789" to string, which     // will be converted to     // "1.23456789000E15" by Double.toString().     if ( ePos != -1 )     {       // Get the exponent of this double       String e = value.substring( ePos + 1 );       int exp = Integer.parseInt( e );       // Move the dot position according to the exponent       StringBuffer sb = new StringBuffer( value.substring( 0, dotPos ) );       if ( ePos - dotPos - 1 > exp )       {         // "1.23456789000E4"         sb.append( value.substring( dotPos + 1, dotPos + 1 + exp ) );         sb.append( '.' );         sb.append( value.substring( dotPos + 1 + exp, ePos ) );         // "12345.6789000"       }       else       {         // "1.23400E8"         sb.append( value.substring( dotPos + 1, ePos ) );         for ( int i = 0; i < exp - ( ePos - dotPos - 1 ); i++ )           sb.append( '0' );         // "123400000"       }       // "1234567890000000" will be the final one       value = sb.toString( );     }     // Limit the fractional number to maximum fractional number     int pos = value.indexOf( '.' );     if ( pos != -1 )     {       if ( value.length( ) - pos - 1 > fNumber )         value = value.substring( 0, pos + fNumber + 1 );       // Remove the ending '0'.       int i = 0;       for ( ; i < fNumber; i++ )       {         if ( value.charAt( value.length( ) - i - 1 ) != '0' )           break;       }       value = value.substring( 0, value.length( ) - i );       // Remove the last dot       if ( value.charAt( value.length( ) - 1 ) == '.' )         value = value.substring( 0, value.length( ) - 1 );     }     return value;   } }