Math.Floor ()와 Math.Truncate ()의 차이점


422

.NET Math.Floor()과 의 차이점은 무엇입니까 Math.Truncate()?


8
예 : Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5
subramani

3
10 년이 지나면 정말 필요한가요? lol
L_Church

1
왜 10 년 후에 현상금이 있습니까? 이미 많은 답변이 있습니다. 내가 여기서 놓친 것이 있습니까?
Puddle

3
이 녀석은 단지 1 개의 질문 만하고 사이트를 떠났습니다. 나는 그가 항상 알고 싶었던 것 같아 .. : D
Nikos

답변:


484

Math.Floor반올림, Math.Ceiling반올림 및 Math.Truncate0으로 반올림합니다. 따라서 Math.Truncate같다 Math.Floor양수 대와 같은 Math.Ceiling음수. 여기 참조 입니다.

완전성 Math.Round을 위해 가장 가까운 정수로 반올림합니다. 숫자가 두 정수 사이의 중간에 있으면 짝수로 반올림합니다. 참고.

Pax Diablo의 답변 도 참조하십시오 . 추천!


31
@ Chris, Round에 대한 설명을 수정하는 것이 좋습니다. 두 가지 방법 (AwayFromZero 및 ToEven)이 있으며 분수 반올림도 가능하므로 가장 가까운 정수로 반올림하지 않습니다 .
paxdiablo

1
따라서 원래 질문에 간단히 추가하십시오 .Math.Truncate와 10 진수 또는 더블을 int로 캐스팅하는 것의 차이점은 무엇입니까? 그것은 단지 0쪽으로 반올림하지 않습니까?
Noam Gal

8
언제 (int)myDouble와 다릅니 (int)Math.Truncate(myDouble)까?
mpen

2
수학 수업에서 (int) 는 무엇입니까 ?
레이 양

386

다음에 대한 MSDN 설명을 보려면 다음 링크를 따르십시오.

  • Math.Floor음의 무한대로 반올림합니다.
  • Math.Ceiling양의 무한대로 반올림합니다.
  • Math.Truncate0으로 올림 또는 내림합니다.
  • Math.Round가장 가까운 정수 또는 지정된 소수 자릿수로 반올림합니다. 마지막 자리가 고르거나 ( " Round(2.5,MidpointRounding.ToEven)"2가되거나) 0에서 멀어 지도록 ( " Round(2.5,MidpointRounding.AwayFromZero)"3이 됨) 반올림과 같이 두 가능성 사이에서 정확히 같은 거리에있을 경우 동작을 지정할 수 있습니다 .

다음 다이어그램과 표가 도움이 될 수 있습니다.

-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

참고 Round가 소수점의 특정 번호로 반올림 할 수 있기 때문에 단순히, 그것은 것보다 훨씬 더 강력하다. 다른 모든 것들은 항상 제로 소수로 반올림합니다. 예를 들면 다음과 같습니다.

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

다른 함수에서는 곱하기 / 나누기 속임수를 사용해야 동일한 효과를 얻을 수 있습니다.

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15

7
Pax, 나는 당신이 실수했다고 생각합니다 : Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding.AwayFromZero) == 0.0 등.
파괴

1
고마워, @ dtroy, 나는 그 모드를 사용할 필요가 없었으며 텍스트가 있으면 올바르게 문서화했지만 완전히 예제가 잘못되었습니다. 잘만되면 그것은 이제 고쳐졌다.
paxdiablo 2016

그런 오래된 질문에 대해 유감스럽게 생각하지만 물어봐야합니다. "ToEven"을 소수점 이하 두 자리로 반올림하는 방법은 무엇입니까? 확실히 이상하고 정수에만 적용됩니까?
Richiban

4
@Richiban 은 전체 숫자 가 2의 배수 여야 함을 의미하는 것이 아니라 반올림 된 숫자 even의 마지막 숫자 의 속성으로 생각 하십시오 . 그건 그렇고, 당신에게 돌아 오는 데 너무 오래 걸렸습니다. 당신이 내 응답을 기다리는 동안 앉아 있지 않았기를 바랍니다 :-)
paxdiablo

62

Math.Floor() 음의 무한대로 반올림

Math.Truncate 0을 향해 올림 또는 내림합니다.

예를 들면 다음과 같습니다.

Math.Floor(-3.4)     = -4
Math.Truncate(-3.4)  = -3

동안

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3

2
간단한 예를 들어서 훌륭하고 간단한 설명이이 질문에 대한 답변으로 표시되어야합니다.
nivs1978

44

몇 가지 예 :

Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7

Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1

29

Math.floor왼쪽으로
Math.ceilsliiiide ... 오른쪽으로
Math.truncatesliiiide ... criiiiss crooooss (바닥 / 천장 항상 0쪽으로)
Math.round차차, 진짜 부드러운 ... (가장 가까운쪽으로 이동)

일하러 갑시다! (⌐ □ _ □)

왼쪽으로 ... Math.floor
이제 다시 가져와 ... --
이번에는 두 홉 ...-=2

모두가 박수를 쳤다 ✋✋

얼마나 낮게 갈 수 있습니까? 아래로 내려갈 수 있습니까? 모든 방법은 floor?

if (this == "wrong")
    return "i don't wanna be right";

Math.truncate(x)와 동일합니다 int(x).
양수 또는 음수 분수를 제거하면 항상 0으로 향합니다.


하하하 좋은 리믹스.
다니엘은

26

기능적으로 양수와 같습니다. 차이점은 음수를 처리하는 방법에 있습니다.

예를 들면 다음과 같습니다.

Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2

Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2

MSDN 링크 : -Math.Floor Method - Math.Truncate 메소드

추신 : 수학 조심. 원하는 것은 아닐 수도 있습니다.

"표준"반올림 결과를 얻으려면 다음을 사용하십시오.

float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5

24

이것을보십시오, 예 :

Math.Floor () Math.Truncate ()

Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4

Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3

또한 Math.Round ()

   Math.Round(1.6) = 2
   Math.Round(-8.56) = -9
   Math.Round(8.16) = 8
   Math.Round(8.50) = 8
   Math.Round(8.51) = 9

math.floor()

지정된 숫자보다 작거나 같은 가장 큰 정수를 반환합니다. MSDN 시스템 .math.floor

math.truncate()

숫자의 정수 부분을 계산합니다. MSDN 시스템 .math.truncate



15

Math.Floor(): 지정된 배정 밀도 부동 소수점 숫자 이하의 가장 큰 정수를 리턴합니다.

Math.Round(): 가장 가까운 정수 또는 지정된 소수 자릿수로 값을 반올림합니다.


1
영업 이익은 차이점에 대해 질문 Floor()하고 Truncate(),하지 Floor()Round().
Robert Columbia

5

Math.floor()항상 반올림됩니다. 즉, LESSER 정수를 반환합니다. round()가장 가까운 정수를 반환하는 동안

math.floor ()

지정된 숫자보다 작거나 같은 가장 큰 정수를 반환합니다.

math.truncate ()

숫자의 정수 부분을 계산합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.