Androidで使おうと思ってすぐに分からなかったのでメモです。
すごく適当なので、間違いとか勘違いはご指摘いただければと思います。
- 参考
http://hack.aipo.com/archives/4178/
http://d.hatena.ne.jp/kameid/20090313/1236957906
-
BigDecimal.precision()
-
String.length()
-
Math.log10()
-
Integer.stringSize
BigDecimal
BigDecimal.valueOf(x).precision();
String
String.valueOf(x).length();
Mathのlog10
Math.log10(x) + 1;
Integer
IntegerのtoStringで使ってるらしいですが、今は違うかも知れません(調べていなくてすみません)
定数と比較してたんですね。
final static int[] sizeTable = {
9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE
};
// Requires positive x
static int stringSize(int x) {
for (int i = 0;; i++)
if (x <= sizeTable[i])
return i + 1;
}
int digit = stringSize(x);
まとめ
どの方法でもあまり変わらないかと思いますが、コストはBigDecimalとStringを使う方法は毎回インスタンスを作るようなので、繰り返し違う値を求める場合はMathを使った方法がいいかもしれません。