web-dev-qa-db-ja.com

Javaで2桁を小数点以下2桁に丸めるにはどうすればよいですか?

これは私が倍数を小数点以下2桁に丸めるためにしたことです:

amount = roundTwoDecimals(amount);

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

これは、量= 25.3569またはそのような場合にうまく機能しますが、量= 25.00または量= 25.0の場合、25.0になります!私が欲しいのは、丸めと小数点以下2桁までの書式設定の両方です。

62
sherry

お金で働いていますか? Stringを作成し、それを元に戻すことはかなりループします。

BigDecimalを使用します。これは非常に広範囲に議論されています。 Moneyクラスが必要で、金額はBigDecimalである必要があります。

お金を扱っていない場合でも、BigDecimalを検討してください。

19
Rob

使用するだけ:(パイのように簡単)

double number = 651.5176515121351;

number = Math.round(number * 100);
number = number/100;

出力は651.52になります

51
Kaspar

数字のプレースホルダー(0)を使用します。「#」のように、末尾/先頭のゼロは不在として表示されます。

DecimalFormat twoDForm = new DecimalFormat("#.00");
19
Mitch Wheat

することはできません「倍数は小数点以下を[任意の数]に丸めます」、なぜなら倍数には小数点がないためです。 base-10には小数点以下の桁があるため、doubleを小数点以下Nのbase-10文字列に変換できますが、元に戻すとbinary小数点以下の桁数で二重ランドに戻ります。

10
user207421

これを使って

String.format( "%。2f"、doubleValue)//要件に応じて2を変更します。

5
Ajeet

これは私が作ることができる最も簡単なものですが、ほとんどの例よりもはるかに簡単に作業を完了できます。

    double total = 1.4563;

    total = Math.round(total * 100);

    System.out.println(total / 100);

結果は1.46です。

5
Austin

Apache commonのorg.Apache.commons.math.util.MathUtilsを使用できます

double round = MathUtils.round(double1, 2, BigDecimal.ROUND_HALF_DOWN);

4
xjodoin

Apache Commons Mathを使用できます。

Precision.round(double x, int scale)

ソース: http://commons.Apache.org/proper/commons-math/apidocs/org/Apache/commons/math3/util/Precision.html#round(double、%20int)

2

倍額= 25.00;

NumberFormat formatter = new DecimalFormat( "#0.00");

System.out.println(formatter.format(amount));

1
Zakila Banu
DecimalFormat df = new DecimalFormat("###.##");
double total = Double.valueOf(val);
1
Urvashi Gupta

Moneyクラスは、Longのサブクラスとして表すことも、ネイティブのlongとしてmoney値を表すメンバーを持つこともできます。次に、お金のインスタンス化に値を割り当てるとき、実際に実際のお金の値である値を常に保存します。 Moneyオブジェクトを(MoneyのオーバーライドされたtoString()メソッドを介して)適切なフォーマットで出力するだけです。例えば、Moneyオブジェクトの内部表現の$ 1.25は125です。お金をセント、ペンス、または封印している通貨の最小額面で表現します。その後、出力でフォーマットします。いいえ、「1.257ドル」などの「違法な」金額を保存することはできません。

1
A.J. Mayers

これを試すことができます:

public static String getRoundedValue(Double value, String format) {
    DecimalFormat df;
    if(format == null)
        df = new DecimalFormat("#.00");
    else 
        df = new DecimalFormat(format);
    return df.format(value);
}

または

public static double roundDoubleValue(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
}
1
Maddy

最初にDecimalFormatクラスのオブジェクトを宣言します。 DecimalFormat内の引数は#.00であることに注意してください。これは、小数点以下2桁の正確な丸めを意味します。

private static DecimalFormat df2 = new DecimalFormat("#.00");

次に、フォーマットをdouble値に適用します。

double input = 32.123456;
System.out.println("double : " + df2.format(input)); // Output: 32.12

double input = 32.1;の場合の注意

その場合、出力は32.10などになります。

0

次に、myFixedNumberを小数点以下2桁に丸めて出力することを保証する簡単な方法を示します。

import Java.text.DecimalFormat;

public class TwoDecimalPlaces {
    static double myFixedNumber = 98765.4321;
    public static void main(String[] args) {

        System.out.println(new DecimalFormat("0.00").format(myFixedNumber));
    }
}

結果は:98765.43

0
S. Mayol

結果を小数点以下2桁にしたい場合は、次のようにします。

// assuming you want to round to Infinity.
double tip = (long) (amount * percent + 0.5) / 100.0; 

この結果は正確ではありませんが、Double.toString(double)はこれを修正し、小数点以下1〜2桁を出力します。ただし、別の計算を実行するとすぐに、暗黙的に丸められない結果を取得できます。 ;)

0
Peter Lawrey

ここで、numは二重数です

  • 整数2は、印刷する小数点以下の桁数を示します。
  • ここでは、2つの10進数の宮殿を取ります。

    System.out.printf( "%。2f"、num);

0
selftaught91

この機能を使用できます。

import org.Apache.commons.lang.StringUtils;
public static double roundToDecimals(double number, int c)
{
    String rightPad = StringUtils.rightPad("1", c+1, "0");
    int decimalPoint = Integer.parseInt(rightPad);
    number = Math.round(number * decimalPoint);
    return number/decimalPoint;
}
0
RAJESH SAHA

Java 1.8以降では、ラムダ式をさらに使用して、nullをチェックできます。また、以下のいずれかは、FloatまたはDoubleと可変小数点数(2 :-)を含む)を処理できます。

public static Double round(Number src, int decimalPlaces) {

    return Optional.ofNullable(src)
            .map(Number::doubleValue)
            .map(BigDecimal::new)
            .map(dbl -> dbl.setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP))
            .map(BigDecimal::doubleValue)
            .orElse(null);
}
0
user6078841
    int i = 180;
    int j = 1;
    double div=  ((double)(j*100)/i);
    DecimalFormat df = new DecimalFormat("#.00"); // simple way to format till any deciaml points
    System.out.println(div);
    System.out.println(df.format(div));
0
Ankit Gupta

金額が正と負の両方であると仮定すると、小数点以下2桁に丸めるには、次のコードスニペットを使用できます。

amount = roundTwoDecimals(amount);

public double roundTwoDecimals(double d) {
    if (d < 0)
       d -= 0.005;
    else if (d > 0)
       d += 0.005;
    return (double)((long)(d * 100.0))/100);
}
0

Math.roundは1つの答えです。

public class Util {
 public static Double formatDouble(Double valueToFormat) {
    long rounded = Math.round(valueToFormat*100);
    return rounded/100.0;
 }
}

Spock、Groovyでテストする

void "test double format"(){
    given:
         Double performance = 0.6666666666666666
    when:
        Double formattedPerformance = Util.formatDouble(performance)
        println "######################## formatted ######################### => ${formattedPerformance}"
    then:
        0.67 == formattedPerformance

}
0
prayagupd