더블을 가장 가까운 정수 값으로 어떻게 변환 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/633335

  •  10-07-2019
  •  | 
  •  

문제

더블을 가장 가까운 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 ...을 통해)로 명시 적 변환이 종종 더 높은 확보 숫자에 대해 잘못된 값을 생성합니다. 위의 방법은 항상 작동하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top