Хотя в DecimalFormat
JavDoc есть раздел «Научная запись», это не соответствует вашим требованиям. Возможно, вы можете избежать «инженерной нотации», описанной в JavaDoc?
Если нет, то самый простой способ - использовать два разных формата, например:
private DecimalFormat df1 = new DecimalFormat("#.###");
private DecimalFormat df2 = new DecimalFormat("0.###E0");
public String formatDouble(double d) {
if( Math.abs(d) < 1000 )
return df1.format(d);
else
return df2.format(d);
}