[c#] Math.Floor (Double)가 Double 유형의 값을 반환하는 이유는 무엇입니까?

소수 또는 이중에서 왼쪽 정수 값을 가져와야합니다. 예 : 4.6에서 값 4를 가져와야합니다. Math.Floor 함수를 사용해 보았지만 이중 값을 반환합니다. 예 : 4.6에서 4.0을 반환합니다. MSDN 설명서에는 정수 값을 반환한다고 나와 있습니다. 여기에 뭔가 빠졌나요? 아니면 내가 원하는 것을 달성하는 다른 방법이 있습니까?



답변

의 범위는 또는 double의 범위보다 훨씬 넓습니다 . 이 코드를 고려하십시오.intlong

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. 이것은 소수점에서 숫자를 자릅니다.

double myDouble = 4.6;
int myInteger = (int)myDouble;


답변

맞아요. 선언을 보면 Math.Floor (double)은 double을 생성합니다 ( http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx 참조 ). “정수”는 “정수”를 의미한다고 가정합니다.


답변

Floor는 더블로 남겨 두므로 더 많은 더블 계산을 할 수 있습니다. int로 원하면 floor의 결과를 int로 캐스팅하십시오. 음수에 대한 바닥 규칙 (IIRC)이 다르기 때문에 원래 double을 int로 캐스팅하지 마십시오.


답변

Convert.ToInt32(Math.Floor(Convert.ToDouble(value)))

이것은 출력으로 4.6반환 하면 원하는 정확한 값을 제공합니다 4.


답변