LoginSignup
3
2

More than 5 years have passed since last update.

Javaで小数点以下の桁数を数える

Last updated at Posted at 2018-02-15

やりたい

小数点以下の数を数えたい。

入力(Float) 出力(int)
0.0 0
1.0 0
0.1 1
11.1 1
0.001 3

コード

public int getPrecision(Float val){
  // JavaではFloat⇒int変換するやりかたは無駄な処理が多いので文字列化して数える
  String str = String.valueOf(val);

  // 文末が ".0"とか".00000"で終わってるやつは全部桁0とする
  if(str.matches("^.*\\.0+$")){
    return 0;
  }

  int index = str.indexOf(".");
  return str.substring(index + 1).length();
}

結果

やりたいことができる。

以下、これを作るにあたってハマった話

最初、正規表現の部分を

str.matches("\\.0+$")

として書いたところ、出力がおかしいことになった。

入力 0.0 出力 1 ←間違い
入力 0.1 出力 1 ←正しい

あれ?

デバッグしてみると、

"0.0".matches("\\.0+$")
//結果:false

あれ?マッチしてない

実は、このコード、以下のコードと同義だった。

"0.0".matches("^\\.0+$$")
//結果:false

結論

javaでString.matchesメソッドを使うときは ^$を含めたregexにしよう

// \\.0+$ の正規表現を使いたいときは。。。
"0.0".matches("^.*\\.0+$")
//結果:true

参考

3
2
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2