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;
}
}
Related examples in the same category