243

私は多くのstackoverflowの質問を読みましたが、どれも私のために働いていないようです。私は四捨五入するために使用math.round()しています。これはコードです:

class round{
    public static void main(String args[]){

    double a = 123.13698;
    double roundOff = Math.round(a*100)/100;

    System.out.println(roundOff);
}
}

私が得る出力は次のとおりです:123しかし、私はそれをしたいです123.14。追加*100/100すると役立つと読んだのですが、ご覧のとおり、うまく機能させることができませんでした。

入力と出力の両方がdoubleであることが絶対に不可欠です。

上記のコードの4行目を変更して投稿すると、非常に役立ちます。

4

12 に答える 12

517

Well this one works...

double roundOff = Math.round(a * 100.0) / 100.0;

Output is

123.14

Or as @Rufein said

 double roundOff = (double) Math.round(a * 100) / 100;

this will do it for you as well.

于 2012-07-28T13:41:21.460 に答える
104
     double d = 2.34568;
     DecimalFormat f = new DecimalFormat("##.00");
     System.out.println(f.format(d));
于 2012-07-28T13:26:31.920 に答える
74
String roundOffTo2DecPlaces(float val)
{
    return String.format("%.2f", val);
}
于 2012-07-28T13:40:56.487 に答える
57
BigDecimal a = new BigDecimal("123.13698");
BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(roundOff);
于 2012-07-28T13:26:10.813 に答える
14

コードに戻り、に置き換え100100.00、機能するかどうかを知らせてください。ただし、正式になりたい場合は、次のことを試してください。

import java.text.DecimalFormat;
DecimalFormat df=new DecimalFormat("0.00");
String formate = df.format(value); 
double finalValue = (Double)df.parse(formate) ;
于 2012-07-28T13:26:21.680 に答える
11

私はこれが2年前の質問であることを知っていますが、すべての体がある時点で値を四捨五入する問題に直面しているため、BigDecimalクラスを使用して任意のスケールに丸められた値を与えることができる別の方法を共有したいと思います。DecimalFormat("0.00")または を使用する場合は、最終値を取得するために必要な余分な手順を避け てくださいMath.round(a * 100) / 100

import java.math.BigDecimal;

public class RoundingNumbers {
    public static void main(String args[]){
        double number = 123.13698;
        int decimalsToConsider = 2;
        BigDecimal bigDecimal = new BigDecimal(number);
        BigDecimal roundedWithScale = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println("Rounded value with setting scale = "+roundedWithScale);

        bigDecimal = new BigDecimal(number);
        BigDecimal roundedValueWithDivideLogic = bigDecimal.divide(BigDecimal.ONE,decimalsToConsider,BigDecimal.ROUND_HALF_UP);
        System.out.println("Rounded value with Dividing by one = "+roundedValueWithDivideLogic);

    }
}

このプログラムは、以下の出力を提供します

Rounded value with setting scale = 123.14
Rounded value with Dividing by one = 123.14
于 2015-03-10T07:24:25.307 に答える
10
double roundOff = Math.round(a*100)/100;

する必要があります

double roundOff = Math.round(a*100)/100D;

'D' を 100 に追加すると Double リテラルになるため、生成される結果には精度があります

于 2012-07-28T13:29:02.370 に答える
6

これは長いものですが、完全な証明ソリューションであり、失敗することはありません

数値を double としてこの関数に渡すだけで、10 進数値を最も近い値 5 に丸めて返されます。

4.25 の場合、出力 4.25

4.20 の場合、出力 4.20

4.24 の場合、出力 4.20

4.26 の場合、出力 4.30

小数点以下2桁まで切り上げたい場合は、

DecimalFormat df = new DecimalFormat("#.##");
roundToMultipleOfFive(Double.valueOf(df.format(number)));

3桁までなら new DecimalFormat("#.###")

n桁までならnew DecimalFormat("#. nTimes # ")

 public double roundToMultipleOfFive(double x)
            {

                x=input.nextDouble();
                String str=String.valueOf(x);
                int pos=0;
                for(int i=0;i<str.length();i++)
                {
                    if(str.charAt(i)=='.')
                    {
                        pos=i;
                        break;
                    }
                }

                int after=Integer.parseInt(str.substring(pos+1,str.length()));
                int Q=after/5;
                int R =after%5;

                if((Q%2)==0)
                {
                    after=after-R;
                }
                else
                {
                   if(5-R==5)
                   {
                     after=after;
                   }
                   else after=after+(5-R);
                }

                       return Double.parseDouble(str.substring(0,pos+1).concat(String.valueOf(after))));

            }
于 2015-03-13T12:57:49.170 に答える
4

あなたは整数演算に見舞われているようです: 一部の言語では (int)/(int) は常に整数演算として評価されます。浮動小数点演算を強制するには、オペランドの少なくとも 1 つが整数でないことを確認してください。

double roundOff = Math.round(a*100)/100.f;
于 2012-07-28T13:28:30.407 に答える
2

コードを変更しました。私のシステムでは問題なく動作します。これが役立つかどうかを確認してください

class round{
    public static void main(String args[]){

    double a = 123.13698;
    double roundOff = Math.round(a*100)/100.00;

    System.out.println(roundOff);
}
}
于 2012-07-28T14:13:47.077 に答える
-4
public static float roundFloat(float in) {
    return ((int)((in*100f)+0.5f))/100f;
}

ほとんどの場合は問題ありません。たとえば、double に準拠したい場合は、型を変更できます。

于 2013-08-10T14:56:24.107 に答える