Doubleを最も近いintに変換するにはどうすればよいですか?
Math.round()
を、おそらくMidpointRounding.AwayFromZero
と組み合わせて使用します
例えば:
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
double d = 1.234;
int i = Convert.ToInt32(d);
次のように丸めを処理します。
最も近い32ビット符号付き整数に丸められます。値が2つの整数の中間にある場合、偶数が返されます。つまり、4.5は4に変換され、5.5は6に変換されます。
関数を使用することもできます:
//Works with negative numbers now
static int MyRound(double d) {
if (d < 0) {
return (int)(d - 0.5);
}
return (int)(d + 0.5);
}
アーキテクチャにもよりますが、数倍高速です。
double d;
int rounded = (int)Math.Round(d);
私はこの質問が古いことを知っていますが、私の似たような質問の答えを探して見つけました。私が与えられた非常に有用なヒントを共有すると思いました。
Intに変換する場合、ダウンキャストする前に値に.5を追加するだけです。 intへのダウンキャストは常に低い数値(たとえば(int)1.7 = 1)に低下するため、数値が.5以上の場合、.5を追加すると次の数値になり、intへのダウンキャストは正しい値を返します。 。 (例:(int)(1.8 + .5)= 2)
この答えが誰にとっても役立つことを願っています。
Unityでは、 Mathf.RoundToInt を使用します。
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
// Prints 10
Debug.Log(Mathf.RoundToInt(10.0f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.2f));
// Prints 11
Debug.Log(Mathf.RoundToInt(10.7f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.5f));
// Prints 12
Debug.Log(Mathf.RoundToInt(11.5f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.0f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.2f));
// Prints -11
Debug.Log(Mathf.RoundToInt(-10.7f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.5f));
// Prints -12
Debug.Log(Mathf.RoundToInt(-11.5f));
}
}
public static int RoundToInt(float f) { return (int)Math.Round(f); }