소수 또는 이중에서 왼쪽 정수 값을 가져와야합니다. 예 : 4.6에서 값 4를 가져와야합니다. Math.Floor 함수를 사용해 보았지만 이중 값을 반환합니다. 예 : 4.6에서 4.0을 반환합니다. MSDN 설명서에는 정수 값을 반환한다고 나와 있습니다. 여기에 뭔가 빠졌나요? 아니면 내가 원하는 것을 달성하는 다른 방법이 있습니까?
소수 또는 이중에서 왼쪽 정수 값을 가져와야합니다. 예 : 4.6에서 값 4를 가져와야합니다. Math.Floor 함수를 사용해 보았지만 이중 값을 반환합니다. 예 : 4.6에서 4.0을 반환합니다. MSDN 설명서에는 정수 값을 반환한다고 나와 있습니다. 여기에 뭔가 빠졌나요? 아니면 내가 원하는 것을 달성하는 다른 방법이 있습니까?
답변:
의 범위는 또는 double
의 범위보다 훨씬 넓습니다 . 이 코드를 고려하십시오.int
long
double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
정수가 범위를 벗어났습니다. long
그러면 어떤 일이 발생할 것으로 예상합니까?
일반적으로 값이 실제로int
또는 범위 내에 있다는 것을 알고 long
있으므로 캐스트합니다.
double d = 1000.1234d;
int x = (int) Math.Floor(d);
하지만 그 캐스트에 대한 책임은 그 Math.Floor
자체가 아니라 개발자에게 있습니다. 범위를 벗어난 모든 값에 대해 예외로 실패하도록 만드는 것은 불필요하게 제한적이었을 것입니다 long
.
MSDN에 따르면 Math.Floor (double)은 double을 반환합니다. http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx
int로 원하는 경우 :
int result = (int)Math.Floor(yourVariable);
MSDN 기사가 오해의 소지가있는 방법을 알 수 있습니다. 결과가 "정수"(이 경우 정수를 의미 함)이지만 여전히 TYPE Double임을 지정해야합니다.
int
이름 )와 (유형 이름 )의 차이를 강조하고 싶었습니다 .
맞아요. 선언을 보면 Math.Floor (double)은 double을 생성합니다 ( http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx 참조 ). "정수"는 "정수"를 의미한다고 가정합니다.
Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))
이것은 출력으로 4.6
반환 하면 원하는 정확한 값을 제공합니다 4
.