Java에서 정수 나누기 [중복]
이 질문에 이미 답변이 있습니다.
이것은 기본적인 질문이지만 답을 수 없습니다. 부동 소수점 산술과 몇 가지 다른 주제를 살펴 봤지만이 문제를 수있는 것이 없습니다. 나는 잘못된 용어를 가지고 확신합니다.
기본적으로 수량을 나눠서 두 가지 수량을 나눠서 사용할 수 있습니다. 수량은 long
s입니다. 설정은 다음과 적응합니다.
long completed = 25000;
long total = 50000;
System.out.println(completed/total); // Prints 0
결과를 이중으로 다시 할당했습니다 0.0
. 인쇄 합니다. 내가 어디로 잘못 가고 있습니까?
단계 여서, 다음은 결과에 100을 곱하는 것입니다.
BTW는 숙제가 아니라 평범한 오래된 numskull-ness (오늘날 너무 많은 코딩)입니다.
출력 변환 이 너무 늦습니다. 계산은 이미 정수 산술로 이루어졌습니다. 입력 을 double
다음으로 변환해야합니다 .
System.out.println((double)completed/(double)total);
실제로 두 입력을 모두 변환 할 필요가 없습니다 . 그중 하나가 double
이면 다른 하나는 암시 적으로 변환됩니다. 하지만 대칭을 위해 두 가지를 모두 선호합니다.
이것을 위해 복식이 필요하지 않습니다. 먼저 100 곱한을 다음 나눕니다. 숫자는 1보다 작고 보시다시피 0으로 잘립니다.
편집 : 또는 오버플로가 항상 가능성이있는 경우 (즉, 피제수가 922337203685477581보다 큰 경우) 먼저 제수를 100으로 나눕니다.
모두 변환 completed
과 total
에 double
캐스팅 또는 double
devision을 수행 할 때. 즉 결과 아니라 변수를 두 배로 캐스팅합니다.
공정한 경고 입니다. 및으로 작업 할 때 부동 소수점 매개 변수 가 있습니다.float
double
In Java
Integer/Integer = Integer
Integer/Double = Double//Either of numerator or denominator must be floating point number
1/10 = 0
1.0/10 = 0.1
1/10.0 = 0.1
그들 중 하나를 캐스트하십시오.
나누기를 수행하기 전에 두 값 중 하나를 실수로 명시 적으로 명시 적으로 묶이지 않는 정수 나누기가 사용됩니다 (그래서 0이됩니다). 두 피연산자 중 하나가 부동 소수점 값이 되기만하면 일반 나눗셈이 사용됩니다 (그리고 다른 정수 값은 자동으로 부동 소수점으로 바뀜).
그냥 시도
float completed = 50000.0f;
그리고 괜찮을 것입니다.
JLS 에서 설명했듯이 정수 연산 은 매우 간단합니다.
시프트 연산자가 아닌 정수 연산자에 long 유형의 피연산자가 하나 이상 있으면 64 비트를 사용하여 연산이 수행되고 숫자 연산자의 결과는 long 유형입니다. 다른 피연산자가 길지 먼저 숫자 승격 (§5.6)에 의해 long을 입력하도록 확장합니다 (§5.1.5).
32 비트 용어를 사용하여 연산이 수행되고 숫자 연산자의 결과는 int 유형입니다. 피연산자가 아니면 먼저 숫자 승격을 통해 int를 입력하도록 확장합니다.
따라서 짧게 말하면 연산은 항상 값 int
이 유일한 예외를 발생 long
합니다.
int = int + int
long = int + long
int = short + short
운영자의 우선 순위가 중요 중요
long = int * int + long
int * int
작업이 추진 될 것 int
, 그것은 추진 될 것 long
작업 중int + long
출력 결과가 두 배이므로 분할하는 동안 완료된 변수 나 총 변수 또는 둘 모두를 두 배로 캐스팅해야합니다.
따라서 올바른 구현은 다음과 같습니다.
System.out.println((double)completed/total);
참고 URL : https://stackoverflow.com/questions/7220681/division-of-integers-in-java
'IT' 카테고리의 다른 글
== PHP에서 대소 문자 식별 비교입니까? (0) | 2020.09.14 |
---|---|
여러 JavaScript 파일을 하나의 JS 파일로 결합 (0) | 2020.09.14 |
Column에 Cell 값이 있는지 확인한 다음 NEXT Cell의 값을 가져옵니다. (0) | 2020.09.14 |
Console.WriteLine () 및 너무 많은 인수 오버로드가 필요하십니까? (0) | 2020.09.14 |
Git Gui에 "당기기"가 없습니까? (0) | 2020.09.14 |