Decimal.divide (int, int)가 작동하지만 (int / int)가 작동하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1043164

  •  20-08-2019
  •  | 
  •  

문제

(int / int)가 나에게 반환되는 두 개의 32 비트 int 번호를 나누는 방법 0, 그러나 내가 사용한다면 Decimal.Divide() 정답을 받습니까? 나는 결코 AC# Guy입니다.

도움이 되었습니까?

해결책

int 정수 유형입니다. 두 개의 int를 나누면 an이 수행됩니다 정수 부서, 즉, 분수 부분은 결과 유형에 저장할 수 없으므로 잘립니다 (또한 또한 int!). Decimal, 대조적으로, 부분적 인 부분이 있습니다. 호출함으로써 Decimal.Divide, 당신의 int 인수는 암시 적으로 변환됩니다 Decimal에스.

비 integer 부서를 시행 할 수 있습니다 int 인수 중 적어도 하나를 플로팅 포인트 유형에 명시 적으로 캐스팅하여 논쟁 : 예를 들어 :

int a = 42;
int b = 23;
double result = (double)a / b;

다른 팁

첫 번째 경우, 당신은 정수 부서를하고 있으므로 결과가 잘립니다 (소수 부분은 잘려옵니다). 정수가 반환됩니다.

두 번째 경우, INT는 먼저 소수성으로 변환되며 결과는 소수점입니다. 따라서 그들은 잘리지 않고 올바른 결과를 얻습니다.

다음 줄 :

int a = 1, b = 2;
object result = a / b;

... 사용을 사용합니다 정수 산술. Decimal.Divide 반면에 유형의 두 매개 변수를 가져옵니다. Decimal, 따라서 부서는 정수 값이 아닌 소수점 값으로 수행됩니다. 이것은 다음과 같습니다.

int a = 1, b = 2;
object result = (Decimal)a / (Decimal)b;

이를 조사하려면 위의 각 예제 다음에 다음 코드 줄을 추가 할 수 있습니다.

Console.WriteLine(result.ToString());
Console.WriteLine(result.GetType().ToString());

첫 번째 케이스의 출력은입니다

0
System.Int32

.. 그리고 두 번째 경우 :

0,5
System.Decimal

나는 생각한다 Decimal.Divide(decimal, decimal) 암시 적으로 2 개의 int 인수를 소수점 값 (정확한)을 반환하기 전에 DECIMALS로 변환하여 4/5가 정수 부서로 취급되고 0을 반환합니다.

당신은 숫자를 캐스팅하고 싶습니다 :

이중 C = (이중) A/(이중) B;

참고 : C#의 인수 중 하나가 이중 인 경우 이중 분할이 사용되어 이중이됩니다. 따라서 다음도 효과가있을 것입니다.

이중 C = (이중) A/B;

다음은 작은 프로그램입니다.

static void Main(string[] args)
        {
            int a=0, b = 0, c = 0;
            int n = Convert.ToInt16(Console.ReadLine());
            string[] arr_temp = Console.ReadLine().Split(' ');
            int[] arr = Array.ConvertAll(arr_temp, Int32.Parse);
            foreach (int i in arr)
            {
                if (i > 0) a++;
                else if (i < 0) b++;
                else c++;
            }
            Console.WriteLine("{0}", (double)a / n);
            Console.WriteLine("{0}", (double)b / n);
            Console.WriteLine("{0}", (double)c / n);
            Console.ReadKey();
        }

0 <a <1 답변을 찾고 있다면 int / int로 충분하지 않습니다. int / int는 정수 부서를 수행합니다. INT 중 하나를 작업 내부의 두 배로 캐스팅 해보십시오.

내 경우에는 위에서 아무것도 작동하지 않았습니다.

내가하고 싶은 것은 278을 575로 나누고 100을 곱하여 백분율을 찾는 것입니다.

double p = (double)((PeopleCount * 1.0 / AllPeopleCount * 1.0) * 100.0);

%: 48,3478260869565 --> 278 / 575 ---> 0 %: 51,6521739130435 --> 297 / 575 ---> 0

peoplecount에 1.0을 곱하면 소수점으로 만들고 분할에 48.34가됩니다. 또한 100이 아닌 100.0을 곱합니다.

그와 같이 표시된 대답은 거의 존재하지만, 이중과 소수점 사용 사이에 차이가 있다고 덧붙일 가치가 있다고 생각합니다.

나는 Wikipedia보다 개념을 설명하는 더 나은 일을하지 않을 것이므로 포인터를 제공 할 것입니다.

부동 소수점 산술

십진 데이터 유형

금융 시스템에서는 종종 특정 수의 (베이스 -10) 소수점 장소 정확도를 보장 할 수 있어야합니다. 입력/소스 데이터가 Base-10에있는 경우 일반적으로 불가능하지만 Base-2에서 산술을 수행합니다 (숫자의 소수 확장에 필요한 소수점의 수는베이스에 따라 다르기 때문에 1/3은 10 진수를 많이 취합니다. 베이스 -10으로 표현할 장소는 0.333333으로 ... 그러나베이스 -3 : 0.1에서는 10 진수 만 필요합니다).

플로팅 포인트 숫자는 (CPU 시간의 관점에서, 프로그래밍 측면에서도 간단합니다)와 함께 작업하기가 더 빠르며 (과학 응용 프로그램에서와 같이) 반올림 오류를 최소화하려고 할 때마다 선호합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top