web-dev-qa-db-ja.com

Java最も近い.5に丸める

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

フロートがあり、それを最も近い0.5に丸めたいのですが。

例えば:

1.1は1.0に丸める必要があります

1.3は1.5に丸める必要があります

2.5は2.5に丸める必要があります

3.223920は3.0に丸める必要があります

[〜#〜] edit [〜#〜]:また、文字列表現だけでなく、その後に実際のフロートを操作したいのです。

18
user1513171

@SamiKorhonenはコメントでこれを言った:

2を掛け、丸め、最後に2で割ります

だからこれはそのコードです:

public static double roundToHalf(double d) {
    return Math.round(d * 2) / 2.0;
}

public static void main(String[] args) {
    double d1 = roundToHalf(1.1);
    double d2 = roundToHalf(1.3);
    double d3 = roundToHalf(2.5);
    double d4 = roundToHalf(3.223920);
    double d5 = roundToHalf(3);

    System.out.println(d1);
    System.out.println(d2);
    System.out.println(d3);
    System.out.println(d4);
    System.out.println(d5);
}

出力:

1.0
1.5
2.5
3.0
3.0
36

一般的な解決策は

public static double roundToFraction(double x, long fraction) {
    return (double) Math.round(x * fraction) / fraction;
}

あなたの場合、あなたはすることができます

double d = roundToFraction(x, 2);

小数点以下2桁に丸める

double d = roundToFraction(x, 100);
9
Peter Lawrey

それほどエレガントではありませんが、次のように独自のRound関数を作成できます(正の数でも機能しますが、負の数をサポートするには追加が必要です)。

public static double roundHalf(double number) {
    double diff = number - (int)number;
    if (diff < 0.25) return (int)number;
    else if (diff < 0.75) return (int)number + 0.5;
    else return (int)number + 1;
}
4
Kostas Chalkias