これはJavaでどのように可能ですか?
フロートがあり、それを最も近い0.5に丸めたいのですが。
例えば:
1.1は1.0に丸める必要があります
1.3は1.5に丸める必要があります
2.5は2.5に丸める必要があります
3.223920は3.0に丸める必要があります
[〜#〜] edit [〜#〜]:また、文字列表現だけでなく、その後に実際のフロートを操作したいのです。
@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
一般的な解決策は
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);
それほどエレガントではありませんが、次のように独自の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;
}