web-dev-qa-db-ja.com

Javaでdoubleを小数点以下2桁に切り捨てるにはどうすればよいですか?

たとえば、変数3.545555555があり、これを3.54に切り捨てます。

74
Johnny

表示目的で使用する場合は、 Java.text.DecimalFormat を使用します。

 new DecimalFormat("#.##").format(dblVar);

計算に必要な場合は、 Java.lang.Math を使用します。

 Math.floor(value * 100) / 100;
116
Bozho
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);

使用可能な RoundingMode および DecimalFormat を確認してください。

40
Cedric Dubourg

ビットオールドフォーラム、上記の答えはいずれも正と負の値の両方で機能しませんでした(計算と丸めだけで切り捨てを行うことを意味します)。 Javaで数値を小数点以下n桁に丸める方法 リンクから

private static BigDecimal truncateDecimal(double x,int numberofDecimals)
{
    if ( x > 0) {
        return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_FLOOR);
    } else {
        return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_CEILING);
    }
}

この方法は私にとってはうまくいきました。

System.out.println(truncateDecimal(0, 2));
    System.out.println(truncateDecimal(9.62, 2));
    System.out.println(truncateDecimal(9.621, 2));
    System.out.println(truncateDecimal(9.629, 2));
    System.out.println(truncateDecimal(9.625, 2));
    System.out.println(truncateDecimal(9.999, 2));
    System.out.println(truncateDecimal(-9.999, 2));
    System.out.println(truncateDecimal(-9.0, 2));

結果 :

0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
17
Mani

最初に、doubleは2進小数であり、実際にはhave小数点以下ではないことに注意してください。

小数点以下の桁数が必要な場合は、BigDecimalを使用します。これには、切り捨てのためのsetScale()メソッドがあります。または、DecimalFormatを使用してStringを取得します。

8

何らかの理由でBigDecimalを使用したくない場合は、doubleintにキャストして切り捨てることができます。

Onesの場所に切り捨てたい場合:

  • 単にintにキャストする

1の場所へ:

  • 10倍する
  • intにキャスト
  • doubleにキャストバック
  • そして10で割ります。

Hundreths場所

  • 100で乗算および除算するなど。

例:

static double truncateTo( double unroundedNumber, int decimalPlaces ){
    int truncatedNumberInt = (int)( unroundedNumber * Math.pow( 10, decimalPlaces ) );
    double truncatedNumber = (double)( truncatedNumberInt / Math.pow( 10, decimalPlaces ) );
    return truncatedNumber;
}

この例では、decimalPlacesは、行きたい場所を過ぎた場所の数であるため、1は10分の1の場所に丸められ、2は100分の1に丸められます。 on(0はonesの場所に丸め、負の1は10の桁に等々)

6
Tarvis

多分Math.floor(value * 100) / 1003.54のような値はdoubleで正確に表現されない場合があることに注意してください。

4
Vlad

NumberFormatクラスオブジェクトを使用して、タスクを実行できます。

// Creating number format object to set 2 places after decimal point
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);            
nf.setGroupingUsed(false);

System.out.println(nf.format(precision));// Assuming precision is a double type variable
3
Rushdi Shams

私が使用する方法は次のとおりです。

double a=3.545555555; // just assigning your decimal to a variable
a=a*100;              // this sets a to 354.555555
a=Math.floor(a);      // this sets a to 354
a=a/100;              // this sets a to 3.54 and thus removing all your 5's

これも実行できます。

a=Math.floor(a*100) / 100;
2
Mitchell Hynes

3.545555555は3.54を取得します。これをフォローしてみてください:

    DecimalFormat df = new DecimalFormat("#.##");

    df.setRoundingMode(RoundingMode.FLOOR);

    double result = new Double(df.format(3.545555555);

これにより、= 3.54になります!

2
Ankush G

文字列としてフォーマットし、ダブルに変換すると、あなたが望む結果が得られると思います。

Double値は、round()、floor()、ceil()にはなりません。

簡単な修正方法は次のとおりです。

 String sValue = (String) String.format("%.2f", oldValue);
 Double newValue = Double.parseDouble(sValue);

表示目的にはsValueを、計算にはnewValueを使用できます。

2
Jao Assy
//if double_v is 3.545555555
String string_v= String.valueOf(double_v);
int pointer_pos = average.indexOf('.');//we find the position of '.'
string_v.substring(0, pointer_pos+2));// in this way we get the double with only 2 decimal in string form
double_v = Double.valueOf(string_v);//well this is the final result

まあこれは少し厄介かもしれませんが、あなたの問題を解決できると思います:)

0
user5251903

たぶん以下:

double roundTwoDecimals(double d) { 
      DecimalFormat twoDForm = new DecimalFormat("#.##"); 
      return Double.valueOf(twoDForm.format(d));
}  
0
Ritesh

簡単なチェックは、Math.floorメソッドを使用することです。小数点以下2桁以下の倍精度をチェックするメソッドを作成しました。

public boolean checkTwoDecimalPlaces(double valueToCheck) {

    // Get two decimal value of input valueToCheck 
    double twoDecimalValue = Math.floor(valueToCheck * 100) / 100;

    // Return true if the twoDecimalValue is the same as valueToCheck else return false
    return twoDecimalValue == valueToCheck;
}
0
chris31389