Я пишу приложение, которое должно выводить десятичные дроби различной длины и разного масштаба в строки без десятичной точки для записи в плоский файл в качестве ввода в другую систему. например,
12345 -> Length:10, Scale:2 -> 0001234500
123.45 -> Length:10, Scale:2 -> 0000012345
123.45 -> Length:10, Scale:3 -> 0000123450
-123.45 -> Length:10, Scale:3, signed:true -> -000123450
123.45 -> Length:10, Scale:3, signed:true -> +000123450
Функция, которую я написал для обработки этого, приведена ниже и будет вызываться сотни тысяч раз, поэтому я хочу убедиться, что нет лучшего, более эффективного способа сделать это. Я искал способы, чтобы заставить DecimalFormat делать больше для меня, но я не вижу, чтобы он обрабатывал мою потребность в форматировании с десятичными знаками, но без десятичной точки.
protected String getFormattedDecimal( String value, int len, int scale, Boolean signed ) throws Exception{
StringBuffer retVal = new StringBuffer();
//Need a BigDecimal to facilitiate correct formatting
BigDecimal bd = new BigDecimal( value );
//set the scale to ensure that the correct number of zeroes
//at the end in case of rounding
bd = bd.setScale( scale );
//taking it that if its supposed to have negative it'll be part of the num
if ( ( bd.compareTo( BigDecimal.ZERO ) >= 0 ) && signed ){
retVal.append( "+" );
}
StringBuffer sbFormat = new StringBuffer();
for (int i = 0; i < len; i++)
{
sbFormat.append('0');
}
DecimalFormat df = new DecimalFormat( sbFormat.toString() );
retVal.append( df.format( bd.unscaledValue() ) );
return retVal.toString();
}