더블을 가장 가까운 정수 값으로 어떻게 변환 할 수 있습니까?
문제
더블을 가장 가까운 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 비트 서명 정수로 반올림. 값이 두 정수 사이의 중간에 있으면 짝수 숫자가 반환됩니다. 즉, 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); }
INT 버튼을 자랑하는 과학 계산기를 개발하고 있습니다. 다음은 간단하고 신뢰할 수있는 솔루션이라는 것을 알았습니다.
double dblInteger;
if( dblNumber < 0 )
dblInteger = Math.Ceiling(dblNumber);
else
dblInteger = Math.Floor(dblNumber);
Math. Round는 때때로 예상치 못한 또는 바람직하지 않은 결과를 생성하며, 정수 (Cast 또는 Convert.Toint ...을 통해)로 명시 적 변환이 종종 더 높은 확보 숫자에 대해 잘못된 값을 생성합니다. 위의 방법은 항상 작동하는 것 같습니다.