プロが教えるわが家の防犯対策術!

JDK1.5のjava.math.BigDecimal#toStringについて教えて下さい。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …

SunにDocumentがありますが、この説明にある「調整された指数」の算出の仕方がよくわからないので、どういうときに指数表示されるのかが分かりません。
例を示してわかりやすく説明していただけるとありがたいです。

A 回答 (1件)

-scale+(ulength-1)


この計算式そのままではないでしょうか? >調整された指数

この式のそれぞれの変数の意味がわからないということであれば、
scale はそのまま BigDecimal のインスタンスメソッドですし、
ulengthは桁数ですよね。

こんなんで試してみました
import java.math.BigDecimal;
import java.math.BigInteger;

class Rec {
String val;
int scale;
Rec(String val, int scale) {
this.val = val;
this.scale = scale;
}
String to_s() {
BigDecimal v = new BigDecimal(
new BigInteger(this.val), this.scale);
return "'" + this.val + "'"
+ " scale =" + this.scale
+ " ulength =" + this.val.length()
+ " -scale+(ulength-1) = " + (-v.scale() + this.val.length() - 1)
+ ", value= " + v.toString();
}
}

class Demo {
static Rec testData[] = {
new Rec("123", 0),
//new Rec("-123", 0),
new Rec("123", -1),
new Rec("123", -3),
new Rec("123", 1),
new Rec("123", 5),
new Rec("123", 10),
new Rec("123", 12)
};
public static void main(String[] args) {
for (Rec i: testData) {
System.out.println(i.to_s());
}
}
}

面倒くさかったので負の数は対応していません :)
実行結果は以下の通り

'123' scale =0 ulength =3 -scale+(ulength-1) = 2, value= 123
'123' scale =-1 ulength =3 -scale+(ulength-1) = 3, value= 1.23E+3
'123' scale =-3 ulength =3 -scale+(ulength-1) = 5, value= 1.23E+5
'123' scale =1 ulength =3 -scale+(ulength-1) = 1, value= 12.3
'123' scale =5 ulength =3 -scale+(ulength-1) = -3, value= 0.00123
'123' scale =10 ulength =3 -scale+(ulength-1) = -8, value= 1.23E-8
'123' scale =12 ulength =3 -scale+(ulength-1) = -10, value= 1.23E-10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!