ゼロに向かってJavaで丸める方法は?Javaでゼロ方向に丸めます
したがって、-1.9が-1.0になり、-0.2が0.0になり、3.4が3.0になります。
Math.round()
は、この変更を行うことができるパラメータですか?
ゼロに向かってJavaで丸める方法は?Javaでゼロ方向に丸めます
したがって、-1.9が-1.0になり、-0.2が0.0になり、3.4が3.0になります。
Math.round()
は、この変更を行うことができるパラメータですか?
私は標準ライブラリには、このような機能を持っていることを信じていません。
問題は、次の
あなたは(つまり、正の値のためにダウン丸め、負の値の切り上げ)数が0よりも大きいか小さいかに応じて、(数学的に言えば)非常に異なる行動を求めているということですこの方法を使用することができる:
public double myRound(double val) {
if (val < 0) {
return Math.ceil(val);
}
return Math.floor(val);
}
+1:正しいこと(AFAICS)を行う唯一の答えです。 –
いつも切り捨てたいのですか?あなたは が引数より大きくないと数学 整数に等しいこと(無限大にもっとも近い)double値を返します
代わりMath.floor
を使用することができます。特別なケース:
public static double floor(double a)
' Math.floor() 'は-veの無限大の方向に丸められ、ゼロではありません。 –
ちょうどintにキャストすればいいですか?
編集:あなたは、二重を保持したい場合は、これは単に十分に動作するはずです:
if (val < 0)
return -Math.floor(-val);
else
return Math.floor(val);
そして、ちょうど自由にコードを分岐し、もう少し賢い感じたい人のために:
long tmp = Double.doubleToLongBits(val);
tmp >>>= 63;
return Math.floor(val) + tmp;
BigDecimal
には多くのものがあります。rounding optionsこのような長いへ
特に、それは、FLOORが正しい数学的挙動に従うという点で、FLOORとは異なるOPの必要性を解決するために、DOWNになります。 – demongolem
RoundingMode.DOWN
を使用すると、ゼロに向かって進みます。
例:
BigDecimal value = new BigDecimal("1.4");
value = value.setScale(0, RoundingMode.DOWN);
System.out.println(value.doubleValue());
BigDecimal value1 = new BigDecimal("-1.4");
value1 = value1.setScale(0, RoundingMode.DOWN);
System.out.println(value1.doubleValue());
ます。また、これを試すことができます。
public static void main(String[] args) {
Double myDouble = -3.2;
System.out.println(myDouble.intValue()); //Prints -3
}
y=sign(x)*floor(abs(x))
または
y=sign(x)*round(abs(x)-0.5)
Javaで実装が容易でなければなりません。
'x-x%1'(Javaのみ) – Museful