답변:
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으로 변환됩니다.
Math.Round
필요한 경우 int를 반환하므로 훨씬 좋습니다 .
[0,.5)
반 번호를 정확히 - - [.5,1)
- 최대. 이 라운드로 조금이라도에 라운딩, 짝수을 바이어스 (.5,1.5)
1 만 [1.5,2.5]
2로
기능을 사용할 수도 있습니다.
//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
)
+ 0.5 * Math.Abs(d)
OverflowException
부동 소수점 값이 Int 범위를 벗어나면 다른 답변의 메소드가 throw 됩니다. https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_
int result = 0;
try {
result = Convert.ToInt32(value);
}
catch (OverflowException) {
if (value > 0) result = int.MaxValue;
else result = int.Minvalue;
}
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 ...를 통한 정수로의 명시 적 변환은 종종 고정밀도 숫자에 대해 잘못된 값을 생성합니다. 위의 방법은 항상 작동하는 것 같습니다.
Convert.ToInt32()
같은 일을, 또는 단순히 소수점 이하 모든 것을 제거합니까?