あわあわエラーログ~わりと技術的~

yachtseaのライフログ・メモ・日記のようなもの

Javaでdouble型の桁数チェックにハマる

新人研修で使っているJavaの問題をチラッと覗いてやってみたら

double型の桁数チェックをする箇所でハマってしまった。

ちなみに小数点以下は切り捨て御免でおkなルール。

double d = 9999999999D;
d = Math.floor(d);
int length = String.valueOf(d).length();
[期待するlength値]
> 10
[実際のlength値]
> 13

ぐぬぬ。

ちなみにdの値は

9.999999999E9

ぐぬぬ。

で、こんな感じに落ち着いた。

double d = 9999999999D;
d = Math.floor(d);
DecimalFormat df = new DecimalFormat("0");
int length = df.format(d).length();
[実際のlength値]
> 10

なんだかJavaって意外と面倒だったんだなーと思いつつ

使い慣れたC#で試してみたら一瞬でできた。

double d = 9999999999;
int length = Math.Floor(d).ToString().Length;
[実際のlength値]
> 10

上記に関してはJavaよりC#の書き方が好きかも。

てか、新人研修結構難しいな。