C#에서 부동 소수점 숫자를 정수로 강제 변환할 때의 차이점: 변환 방법이 결과에 영향을 미칩니다
C#에서 부동 소수점 연산은 결과를 정수로 캐스팅할 때 예기치 않은 동작이 발생할 수 있습니다. 다음 코드 조각을 고려해보세요.
<code class="language-csharp">int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp;</code>
이론적으로 speed1과 speed2는 동일한 값을 생성해야 하지만 놀랍게도 결과는 다릅니다.
<code>speed1 = 61 speed2 = 62</code>
왜 이런 일이 일어나는 걸까요?
문제의 핵심은 부동 소수점 연산으로, 이로 인해 반올림 오류가 발생할 수 있습니다. (int)(6.2f 10)에서 값 6.2f 10(약 61.999998)이 정수로 잘려서 61이 됩니다.
반대로 int speed2 = (int)tmp에서는 값 6.2f * 10이 먼저 가장 가까운 부동 소수점 값인 62로 반올림됩니다. 이 반올림된 값은 정수로 변환되어 62가 됩니다.
예측 가능한 동작을 보장하려면 일반적으로 암시적 변환에 의존하기보다는 반올림 작업에 Math.Round 또는 유사한 함수를 사용하는 것이 좋습니다.
위 내용은 C#에서 Float를 Int로 캐스팅하면 방법에 따라 다른 결과가 생성되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!