Programing

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

lottogame 2020. 6. 27. 11:01
반응형

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


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 비트 부호있는 정수로 반올림됩니다. 값이 두 정수 사이의 중간이면 짝수가 리턴됩니다. 즉, 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로 변환 할 때 다운 캐스트하기 전에 값에 0.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는 때때로 예기치 않은 또는 바람직하지 않은 결과를 생성하고, 캐스트 또는 Convert.ToInt ...를 통한 정수로의 명시 적 변환은 종종 고정밀도 숫자에 대해 잘못된 값을 생성합니다. 위의 방법은 항상 작동하는 것 같습니다.

참고URL : https://stackoverflow.com/questions/633335/how-might-i-convert-a-double-to-the-nearest-integer-value

반응형