어떻게 두 개의 32 비트 정수를 (int / int)로 나누면 나에게 반환 0
되지만, 내가 사용 Decimal.Divide()
하면 정답을 얻을 수 있습니까? 나는 결코 ac # 사람이 아닙니다.
어떻게 두 개의 32 비트 정수를 (int / int)로 나누면 나에게 반환 0
되지만, 내가 사용 Decimal.Divide()
하면 정답을 얻을 수 있습니까? 나는 결코 ac # 사람이 아닙니다.
답변:
int
정수 유형입니다. 두 개의 int를 나누면 정수 나눗셈을 수행합니다 . 즉, 결과 유형에 저장할 수 없기 때문에 소수 부분이 잘립니다 ( int
!). Decimal
반대로에는 소수 부분이 있습니다. 를 호출 Decimal.Divide
하면 int
인수가 암시 적으로 Decimal
s 로 변환됩니다 .
int
인수 중 하나 이상을 명시 적으로 부동 소수점 유형으로 캐스팅 하여 인수에 정수가 아닌 나누기를 적용 할 수 있습니다 . 예 :
int a = 42;
int b = 23;
double result = (double)a / b;
다음 줄 :
int a = 1, b = 2;
object result = a / b;
... 정수 산술을 사용하여 수행됩니다 . Decimal.Divide
반면에 유형의 두 매개 변수를 사용 Decimal
하므로 분할은 정수 값이 아닌 10 진수 값에서 수행됩니다. 이는 다음과 같습니다.
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
숫자를 캐스팅하고 싶습니다.
더블 c = (더블) a / (더블) b;
참고 : C #의 인수 중 하나가 double이면 이중 나누기가 사용되어 이중이됩니다. 따라서 다음도 작동합니다.
더블 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();
}
제 경우에는 아무것도 작동하지 않았습니다.
제가하고 싶은 것은 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을 곱하면 10 진수가되고 나눗셈은 48.34가됩니다. 또한 100이 아닌 100.0을 곱합니다.
그렇게 표시된 대답은 거의 다 왔지만 double과 decimal을 사용하는 것에는 차이가 있다는 점을 덧붙일 가치가 있다고 생각합니다.
나는 위키 백과보다 개념을 더 잘 설명하지 않을 것이므로 포인터 만 제공 할 것이다.
금융 시스템에서는 특정 소수점 이하 자릿수 (10 진수) 정확도를 보장 할 수 있어야하는 경우가 종종 있습니다. 입력 / 소스 데이터가 10 진수 인 경우 일반적으로 불가능하지만 2 진수로 산술을 수행합니다 (숫자의 소수 확장에 필요한 소수 자릿수는 기본에 따라 다르기 때문에 1/3은 무한히 많은 소수를 사용합니다. 10 진수로 표현할 자리는 0.333333 ...이지만, 3 진수에서는 소수 하나만 사용합니다 : 0.1).
부동 소수점 숫자는 작업이 더 빠르며 (CPU 시간 측면에서, 프로그래밍 측면에서 똑같이 간단 함) 반올림 오류를 최소화하려는 경우 (과학 응용 프로그램에서와 같이) 선호됩니다.