2011-12-27 6 views
1

数値に含まれる小数点以下の桁数に応じてコードを実行する方法はありますか?たとえば、doubleが2.0の場合は整数に変換したいが、2.43426の場合はdoubleとして残しておきたい。ありがとう!If Else(小数点以下桁数)の条件

+0

これはどのように役立つでしょうか? (Javaが静的型の言語であることを念頭に置いて) –

+0

私はそれらを文字列に変換して書き出すので、3.0ではなく3で、3.4324ではなく3であると言いたいと思います。私はこれを完全に間違ったやり方にしているかもしれません。 – Wilson

+0

これは単なる出力目的のための書式設定の問題ですか? –

答えて

6

わからないだろうが:あなたのための

double d = 2.0; 

if ((long) d == d) { 
    // then 
} 

仕事ですか?その特定のケースであなたの質問に答えるだけです。

+0

私はそれを試みます。それはうまくいくようです。私があなたの答えを受け入れるでしょう! – Wilson

+2

'int'ではなく' long'を使うべきです。 –

+0

本当に、それは良いヒントです。 – jcxavier

0

あなたは精度を指定し、次のように変換することができます:

double precision = 1e-10; 

int rounded = Math.round(x); 
if (Math.abs(x-rounded) > precision) System.out.print(x) 
else System.out.print(rounded); 
0
  1. 、正規表現を使用して文字列
  2. に二重の変換小数点を検索し、その後の文字数を取得します。
  3. 迅速かつ汚いソリューションは以下になり、あなたのif-else
0

でそれを使用します。

double foo = 2.43426; 
int count = String.valueOf(foo).split(".")[1].toCharArray().length; 
if(count > 1){ 
    // do stuff 
} 
0

これはあなたが後にしているものである場合:

私はそれらを文字列に変換して書き出すので、3.0の代わりに3を、3.4324の代わりに3を指定したいと思うでしょう。

次に「正しい」方法はDecimalFormatを使用している:

DecimalFormat fmt = new DecimalFormat("0.#"); 
fmt.setMaximumFractionDigits(Integer.MAX_VALUE); 
assert "3".equals(fmt.format(3.0)); 
assert "3.4324".equals(fmt.format(3.4324)); 

ただし、小数点区切りを(私はコンマではなく、ドットを得る)ローカライズありません。それが問題の場合は、fmt.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.ROOT))に電話するだけです。

関連する問題