자바의 정수 분할
이건 기본적인 질문인데 답을 찾을 수가 없어요.부동소수점 산술과 몇 가지 다른 주제들을 알아봤지만 이 문제를 해결할 수 있는 것은 아무것도 없는 것 같다.제가 용어를 잘못 알고 있는 게 확실해요.
기본적으로는 완제품과 합계 두 가지 수량을 취해서 (완제품의) 비율을 정하기 위해 나누고 싶습니다.수량은long
s. 설정은 다음과 같습니다.
long completed = 25000;
long total = 50000;
System.out.println(completed/total); // Prints 0
결과를 이중으로 재할당하려고 했습니다. 인쇄가 됩니다.0.0
어디가 잘못됐나요?
덧붙여서, 다음 단계는 이 결과에 100을 곱하는 것입니다.이 작은 장애물을 넘으면, 이것은 쉬울 것이라고 생각합니다.
그런데 여기 숙제가 아니라 그냥 오래된 숫자일 뿐이다(오늘날 너무 많은 코딩이 있을지도 모른다).
출력을 변환하는 것이 너무 늦습니다. 계산이 이미 정수 산술로 이루어졌습니다.입력을 다음으로 변환해야 합니다.double
:
System.out.println((double)completed/(double)total);
실제로 두 입력을 모두 변환할 필요는 없습니다.그들 중 한 명이double
다른 하나는 암묵적으로 변환됩니다.하지만 대칭을 위해서 둘 다 하는 게 더 좋아요.
이건 더블도 필요없어.먼저 100을 곱하고 나서 나누면 됩니다.그렇지 않으면 결과는 1보다 작아지고 표시된 바와 같이 0으로 잘립니다.
edit: 또는 오버플로우 가능성이 있는 경우 오버플로우(배당이 922337203685477581보다 큰 경우) 먼저 제수를 100으로 나눕니다.
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
둘 중 하나를 타이핑해 주세요.
둘 다 변환completed
그리고.total
로.double
아니면 적어도 그들을double
디비전을 할 때.즉, 결과를 두 배로 늘리기 위해 변수들을 던집니다.
적절한 경고입니다. 작업 시 부동 소수점 정밀도 문제가 있습니다.float
그리고.double
.
나눗셈을 수행하기 전에 두 값 중 하나를 플로트에 명시적으로 캐스팅하지 않으면 정수 나눗셈이 사용됩니다(따라서 0이 됩니다).두 오퍼랜드 중 하나만 부동소수점 값으로 하면 정규 나눗셈이 사용됩니다(다른 정수 값은 자동으로 부동소수로 변환됩니다).
로 시험해 보세요.
float completed = 50000.0f;
괜찮을 거야
JLS에서 설명한 바와 같이 정수 연산은 매우 간단합니다.
시프트 연산자 이외의 정수 연산자가 적어도 1종류의 긴 피연산자를 가지고 있는 경우에는 64비트 정밀도로 연산을 실시하고, 그 수치 연산자의 결과는 긴 종류이다.다른 피연산자가 길지 않은 경우 먼저 숫자 승진을 통해 길이가 긴 피연산자(5 5.1.5)로 넓어진다( if 5.6).
그렇지 않으면 32비트 정밀도로 연산이 이루어지며, 수치 연산자의 결과는 int형이다.어느 하나의 오퍼랜드가 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
'programing' 카테고리의 다른 글
SQLite 대신 MySQL을 사용하여 새 Ruby on Rails 응용 프로그램 만들기 (0) | 2022.09.21 |
---|---|
원칙이 있는 여러 열로 정렬 (0) | 2022.09.21 |
유형 ORM 대량 삽입? (0) | 2022.09.21 |
memory_get_peak_memory()와 "실제 사용" (0) | 2022.09.21 |
2+40은 왜 42일까요? (0) | 2022.09.21 |