floatからdoubleへの暗黙キャストの話

http://d.hatena.ne.jp/asc_gamefreak/20070425

先日書いたBigDecimalの話ですが、
言いたかったことは、

  1. floatからdoubleへの暗黙キャストの結果、表現できる精度に差があるので期待している値にならないことがある。
  2. floatからdoubleへの暗黙キャストはコンパイルエラーがなければ警告も出ない。
  3. JavaSE5.0では BigDecimal.valueOf(double) はあるが、BigDecimal.valueOf(float) はない。これを知らずにBigDecimal.valueOf(double)にfloat値を渡すと、暗黙キャストのせいでBigDecimalインスタンスの値が期待と違ってしまう。

というコンボを食らわないように注意しよう、ということでした。


J2SE1.4から5.0でのBigDecimalの大幅な変更については、全然考慮してませんでした。ごめんなさい。


// いろいろ考えてみたものの、そもそもそこまでして浮動小数点数を使う意味ないな、とか考えてたら補足するのもおっくうになってしまった・・・
// BigDecimalやDouble,Floatのソースコードを見てみたものの、肝心な部分がnativeメソッドになってて、具体的な変換ロジックがわからずじまいでした。