2011-12-13 7 views
8

私はのようなJavaの小数点以下の一連の持っている:私は、小数点以下5桁の後にすべてのものを遮断したい丸めなしでJavaで小数点以下を切り取る方法は?

0.43678436287643872 
0.4323424556455654 
0.6575643254344554 

を。これはどのように可能ですか?

+1

技術的には、何ら:のみ、さらに小数点以下を遮断する行為*です*丸め、常に小数点第5位を四捨五入しています。あなたのオプションについては以下の回答を参照してください。 – Piskvor

+1

結果を文字列または数字にしますか? –

+0

結果が数字になるようにします – Zubair

答えて

23

あなたが迅速かつ簡単なものを維持したい場合。 ;)

public static void main(String... args) { 
    double[] values = {0.43678436287643872, 0.4323424556455654, 0.6575643254344554, 
      -0.43678436287643872, -0.4323424556455654, -0.6575643254344554, 
      -0.6575699999999999 }; 

    for (double v : values) 
     System.out.println(v + " => "+roundDown5(v)); 
} 

public static double roundDown5(double d) { 
    return (long) (d * 1e5)/1e5; 
} 

// Or this. Slightly slower, but faster than creating objects. ;) 
public static double roundDown5(double d) { 
    return Math.floor(d * 1e5)/1e5; 
} 

プリント

0.43678436287643874 => 0.43678 
0.4323424556455654 => 0.43234 
0.6575643254344554 => 0.65756 
-0.43678436287643874 => -0.43678 
-0.4323424556455654 => -0.43234 
-0.6575643254344554 => -0.65756 
-0.6575699999999999 => -0.65756 
+2

すばらしい解決策!シンプルで扱いにくい。大好きです! thx – nowaq

+0

これはちょうど最高の解決策かもしれません!私はそれを受け入れる前に、問題を見つけようとしています! – Zubair

+0

-0.657569はどうでしょうか?-0.65756? – Zubair

17
float f = 0.43678436287643872; 
BigDecimal fd = new BigDecimal(f); 
BigDecimal cutted = fd.setScale(5, RoundingMode.DOWN); 
f = cutted.floatValue(); 
+0

小数点以下第1位は使用しませんか? OPはそれを避けたい。 – tobiasbayer

+0

HALF_UPが正しくありません。 「DOWN」である可能性がありますか? – Kent

+0

はい、もちろん、ダウンします。 – Artem

7
Double.parseDouble(String.valueOf(x).substring(0,7)); 

OR

Double.valueOf(String.valueOf(x).substring(0,7)); 

xは、私はjava.text.DecimalFormatクラスは何が必要であると考えているあなたは、このような0.43678436287643872

+0

コメントを投稿するのではなく、回答を編集することができます。 –

+0

@Piskvor:私の間違い。私は "0"を数えなかった。編集されました。 – Kris

+0

@HarryJoy: – Kris

2

としてカットする値が含まれています。

6

DecimalFormatもここに助けになることができます:

double d = 0.436789436287643872; 
    DecimalFormat df = new DecimalFormat("0.#####"); 
    df.setRoundingMode(RoundingMode.DOWN); 

    double outputNum = Double.valueOf(df.format(d)); 
    String outpoutString = df.format(d); 
1

私はこのような正規表現でそれを行うだろう:あなたはより多くをサポートする必要がある場合

double[] values = { 
      0.43678436287643872, 
      0.4323424556455654, 
      0.6575643254344554, 
      -0.43678436287643872, 
      -0.4323424556455654, 
      -0.6575643254344554 
    }; 

    Pattern p = Pattern.compile("^(-?[0-9]+[\\.\\,][0-9]{1,5})?[0-9]*$"); 
    for(double number : values) { 
     Matcher m = p.matcher(String.valueOf(number)); 
     boolean matchFound = m.find(); 
     if (matchFound) { 
      System.out.println(Double.valueOf(m.group(1))); 
     } 
    } 

パターンを容易に変更することができます/小数点以下の桁数

1

をあなたが行うことができます答えていないピーターを一般化するには:

public static double round(double n, int decimals) { 
    return Math.floor(n * Math.pow(10, decimals))/Math.pow(10, decimals); 
} 
関連する問題