dMinAxis += dStep; if ( dMinValue < 0 ) { dMinAxis = -dMinAxis; } else if ( dMinValue == 0 ) { dMinAxis = 0; }
oStep = new Double( Math.abs( dMaxValue - dMinValue ) / ( oStepNumber.intValue( ) - 1 ) ); dStep = asDouble( oStep ).doubleValue( );
	public final void updateAxisMinMax( Object oMinValue, Object oMaxValue )	{		if ( ( iType & LOGARITHMIC ) == LOGARITHMIC )		{			if ( ( iType & PERCENT ) == PERCENT )			{				oMaximum = new Double( 100 );				oMinimum = new Double( 1 );				oStep = new Double( 10 );				bMaximumFixed = true;				bMinimumFixed = true;				bStepFixed = true;				return;			}			final double dMinValue = asDouble( oMinValue ).doubleValue( );			final double dMaxValue = asDouble( oMaxValue ).doubleValue( );			final double dAbsMax = Math.abs( dMaxValue );			final double dAbsMin = Math.abs( dMinValue );			final double dStep = asDouble( oStep ).doubleValue( );			final double dStepLog = Math.log( dStep );			int iPow = (int) Math.floor( Math.log( dAbsMax ) / dStepLog ) + 1;			double dMaxAxis = Math.pow( dStep, iPow );			iPow = (int) Math.floor( Math.log( dAbsMin ) / dStepLog ) - 1;			double dMinAxis = Math.pow( dStep, iPow + 1 );			if ( !bMaximumFixed )			{				oMaximum = new Double( dMaxAxis );			}			if ( !bMinimumFixed )			{				oMinimum = new Double( dMinAxis );			}		}		else if ( ( iType & DATE_TIME ) == DATE_TIME )		{			int iUnit = asInteger( oUnit );			int iStep = asInteger( oStep );			CDateTime cdtMinValue = asDateTime( oMinValue );			CDateTime cdtMaxValue = asDateTime( oMaxValue );			if ( !bMinimumFixed )			{				oMinimum = cdtMinValue.backward( iUnit, iStep );			}			( (CDateTime) oMinimum ).clearBelow( iUnit );			if ( !bMaximumFixed )			{				oMaximum = cdtMaxValue.forward( iUnit, iStep );			}			( (CDateTime) oMaximum ).clearBelow( iUnit );		}		else		{			final double dMinValue = asDouble( oMinValue ).doubleValue( );			final double dMaxValue = asDouble( oMaxValue ).doubleValue( );			final double dAbsMax = Math.abs( dMaxValue );			final double dAbsMin = Math.abs( dMinValue );			final double dStep = asDouble( oStep ).doubleValue( );			double dMinAxis = ( dStep > 1 ) ? Math.floor( dAbsMin / dStep )					: Math.round( dAbsMin / dStep );			dMinAxis *= dStep;			if ( dMinAxis == dAbsMin )			{				dMinAxis += dStep;				if ( dMinValue < 0 )				{					dMinAxis = -dMinAxis;				}				else if ( dMinValue == 0 )				{					dMinAxis = 0;				}			}			else			{				if ( dMinValue < 0 )				{					dMinAxis = -( dMinAxis + dStep );				}				else if ( dMinAxis >= dMinValue && dMinAxis != 0 )				{					dMinAxis -= dStep;				}			}			double dMaxAxis = ( dStep > 1 ) ? Math.floor( dAbsMax / dStep )					: Math.round( dAbsMax / dStep );			dMaxAxis *= dStep;			if ( dMaxAxis == dAbsMax )			{				dMaxAxis += dStep;				if ( dMaxValue == 0 )				{					dMaxAxis = 0;				}			}			else if ( dMinAxis != dMaxValue )			{				if ( dMaxValue < 0 )				{					dMaxAxis = -( dMaxAxis - dStep );				}				else if ( dMaxValue > 0 )				{					if ( dMaxAxis < dMaxValue )					{						dMaxAxis += dStep;					}				}			}			if ( dMinValue < 0 && dMaxValue < 0 )			{				if ( dMaxAxis <= dMaxValue - dStep )				{					dMaxAxis += 2 * dStep;				}			}			if ( dMinValue > 0 && dMaxValue > 0 )			{				if ( dMinAxis >= dMinValue + dStep )				{					dMinAxis -= 2 * dStep;				}			}			// handle special case for min/max are both zero			if ( dMinValue == 0 && dMaxValue == 0 )			{				if ( dMinAxis >= 0 )				{					dMinAxis = -1;				}				if ( dMaxAxis <= 0 )				{					dMaxAxis = 1;				}			}			// To make sure the boundary is always 100, -100 in percent type			if ( ( iType & PERCENT ) == PERCENT )			{				if ( dMaxAxis > 0 )				{					dMaxAxis = 100;				}				if ( dMinAxis < 0 )				{					dMinAxis = -100;				}			}			if ( !bMaximumFixed )			{				oMaximum = new Double( dMaxAxis );			}			if ( !bMinimumFixed )			{				oMinimum = new Double( dMinAxis );			}		}	}