String 形式を使用してこれを行う良い方法を見つけました。どうやら、ユーザーは文字列形式「g」または「G」で最大有効桁数を指定できるようです。( http://developer.android.com/reference/java/util/Formatter.html )
印刷だけしたい場合はこちら。
public String toSignificantFiguresString(BigDecimal bd, int significantFigures){
return String.format("%."+significantFigures+"G", bd);
}
これを変換する場合は次のとおりです。
public BigDecimal toSignificantFigures(BigDecimal bd, int significantFigures){
String s = String.format("%."+significantFigures+"G", bd);
BigDecimal result = new BigDecimal(s);
return result;
}
実際の例を次に示します。
BigDecimal bd = toSignificantFigures(BigDecimal.valueOf(12345678.123456789), 10);
System.out.println("bd: " + String.format("%f",bd));
注意: double と float には精度の問題があるため、計算には BigDecimal を使用しています。)