두 정수를 나눠 두 배를 얻는 방법은 무엇입니까?


282

두 정수를 나누고 두 배를 얻으려면 어떻게해야합니까?


10
이것이 인터뷰에서 요청되었다고 가정하면-정수 나누기는 항상 정수입니다. 아래에 표시된 것과 같은 유형 캐스트를 사용해야합니다.
Sesh

답변:


460

당신은 숫자를 캐스팅하려고합니다 :

double num3 = (double)num1/(double)num2;

참고 : C #의 인수 중 하나가 a double이면 double나누기가 사용되어 결과가 나타납니다 double. 따라서 다음도 작동합니다.

double num3 = (double)num1/num2;

자세한 내용은 다음을 참조하십시오.

닷넷 펄


3
이것이 C #에서 동일한 지 모르지만 C는 첫 번째 캐스팅 만하면됩니다. 자동으로 double / int를 double로 만듭니다.
paxdiablo 2016 년

4
@Pax, C 또는 C #의 인수 중 하나가 double 인 경우 double 나누기가 사용됩니다 (double로 결과).
strager

32
이렇게하지 않도록주의하십시오 :- double num3 = (double)(num1/num2);. 이것은 정수 나눗셈 결과의 이중 표현을 제공합니다!
외로운 코더

여분의 정밀도가 필요하지 않다고 가정하면 double대신에 캐스팅해야 할 이유 가 float있습니까? 질문이 필요 double하다는 것을 알 수 있지만 어쨌든 궁금합니다.
Kyle Delaney

@KyleDelaney C #에서 우리는 일반적으로 사용하지만 double그렇지 않습니다 float. 처럼 변수를 작성할 var a = 1.0;때이 1.0은 항상 a double입니다. 이것이 주된 이유라고 생각합니다.
this.myself

31

@NoahD의 답변 보완

정밀도를 높이려면 십진수로 캐스트 할 수 있습니다.

(decimal)100/863
//0.1158748551564310544611819235

또는:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Double은 64 비트를 할당하는 반면 소수는 128을 사용합니다

(double)100/863
//0.11587485515643106

"정밀도"에 대한 깊이있는 설명

부동 소수점 이진 표현 및 정밀도에 대한 자세한 내용을 살펴 가지고 이 문서 그가 대해 이야기 곳 존 소총에서을 floats하고 doubles그리고 이 한 그는 대한 이야기 decimals.


2
잘못된! double53 비트의 정밀도를 가지며, 이진 부동 소수점 형식이지만 decimal, 96 비트 정밀도 의 10 진수 입니다. 따라서 double~ 15-17의 소수점 이하 자릿수와 28-29의 소수점 이하 자릿수까지 정확합니다 (의 정밀도의 두 배가 아님 double). 더 중요한 것은 decimal실제로 128 비트 중 102 비트 만 사용하는 것입니다
phuclv

@ phuclv에게 감사드립니다. "공간 할당"을 의미했습니다. 당신의 정밀도에 대한 옳았 decimals(96), 그러나 doubles가수의 52 비트 가 아닌 53
fabriciorissetto

1
예, 가수에는 52 비트가 있지만 여전히 숨겨진 비트가있어 53 비트로 나타납니다. 부동 소수점 정밀도가 52 비트 또는 53 비트입니까?
phuclv

Decimal. Divide는 훌륭했습니다! Thx
Ricardo G Saraiva

10

정수를 두 배로 캐스트하십시오.


구체적으로, 다음과 같이 정수를 double로 캐스트 할 수 있습니다 : (double) myIntegerValue
Whiplash

5

그중 하나를 이중으로 먼저 변환하십시오. 이 양식은 여러 언어로 작동합니다.

 real_result = (int_numerator + 0.0) / int_denominator

1
더 쉬운 ...var result = 1.0 * a / b;
기본

@Basic에는 100 가지 방법이 있습니다. 캐스팅은 분명히 더 빠르지 만 더 빠르기 때문에 추가를 선호합니다.
Mark Ransom

1
var firstNumber=5000,
secondeNumber=37;

var decimalResult = decimal.Divide(firstNumber,secondeNumber);

Console.WriteLine(decimalResult );

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