>백엔드 개발 >C++ >C#에서 Float를 Int로 캐스팅하면 방법에 따라 다른 결과가 생성되는 이유는 무엇입니까?

C#에서 Float를 Int로 캐스팅하면 방법에 따라 다른 결과가 생성되는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-08 17:22:40437검색

Why Do Casting Floats to Ints in C# Produce Different Results Depending on the Method?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.