double 값에 소수점이 없는지 확인하는 방법
이 질문에 이미 답변이 있습니다.
- double이 정수인지 테스트하는 방법 14 답변
UI에 표시해야하는 이중 값이 있습니다. 이제 조건은 double = 0의 10 진수 값 예입니다. -14.0이 경우 UI에 14 개만 표시하면됩니다. 또한 여기에서 문자의 최대 제한은 5 자입니다.
예.-12.34 정수 값은 2 자리보다 클 수 없으며 double의 십진수 값도 마찬가지입니다.
이를 수행하는 가장 좋은 방법은 무엇입니까?
간단히 이렇게 할 수 있습니다. d % 1 == 0
일부 double d
가 전체 인지 확인하기 위해 .
double d = 14.4;
if((d-(int)d)!=0)
System.out.println("decimal value is there");
else
System.out.println("decimal value is not there");
모든 정수는 1의 모듈로입니다. 따라서 아래 확인은 답을 제공해야합니다.
if(d % 1 == 0)
천장과 바닥 모두 동일한 출력을 제공해야합니다.
Math.ceil(x.y) == Math.floor(x.y)
또는 단순히 이중 값과 같은지 확인하십시오.
x.y == Math.ceil(x.y)
x.y == Math.floor(x.y)
또는
Math.round(x.y) == x.y
두 개의 값을 비교하십시오 : 일반 double과 floor
그것을 한 후 double . 값이 같으면 소수점 구성 요소가 없습니다.
필요에 따라 숫자 포맷터를 사용하여 값을 포맷하십시오. 이것을 확인 하십시오 .
몇 가지 계산을 수행 한 경우 double에는 매우 작은 소수 부분이 포함될 수 있으므로 비교하기 전에 double을 5 자리 소수로 반올림 할 수 있습니다.
double d = 10.0;
d /= 3.0; // d should be something like 3.3333333333333333333333...
d *= 3.0; // d is probably something like 9.9999999999999999999999...
// d should be 10.0 again but it is not, so you have to use rounding before comparing
d = myRound(d, 5); // d is something like 10.00000
if (fmod(d, 1.0) == 0)
// No decimals
else
// Decimals
C ++를 사용하는 경우 라운드 함수가 없다고 생각하므로 http://www.cplusplus.com/forum/general/4011/ 에서 직접 구현해야합니다 .
재미있는 작은 문제. 실수가 의도 된 경우에도 항상 정확한 정수를 나타내는 것은 아니기 때문에 약간 까다 롭습니다. 따라서 허용 오차를 허용하는 것이 중요합니다.
예를 들어 허용 오차는 1E-6 일 수 있습니다. 단위 테스트에서는 더 짧은 숫자를 갖기 위해 다소 거친 허용 오차를 유지했습니다.
내가 읽을 수있는 답 중 어느 것도 지금 이런 식으로 작동하지 않으므로 여기에 내 해결책이 있습니다.
public boolean isInteger(double n, double tolerance) {
double absN = Math.abs(n);
return Math.abs(absN - Math.round(absN)) <= tolerance;
}
그리고 단위 테스트가 작동하는지 확인합니다.
@Test
public void checkIsInteger() {
final double TOLERANCE = 1E-2;
assertThat(solver.isInteger(1, TOLERANCE), is(true));
assertThat(solver.isInteger(0.999, TOLERANCE), is(true));
assertThat(solver.isInteger(0.9, TOLERANCE), is(false));
assertThat(solver.isInteger(1.001, TOLERANCE), is(true));
assertThat(solver.isInteger(1.1, TOLERANCE), is(false));
assertThat(solver.isInteger(-1, TOLERANCE), is(true));
assertThat(solver.isInteger(-0.999, TOLERANCE), is(true));
assertThat(solver.isInteger(-0.9, TOLERANCE), is(false));
assertThat(solver.isInteger(-1.001, TOLERANCE), is(true));
assertThat(solver.isInteger(-1.1, TOLERANCE), is(false));
}
참고 URL : https://stackoverflow.com/questions/15963895/how-to-check-if-a-double-value-has-no-decimal-part
'developer tip' 카테고리의 다른 글
Android에서 모든 연락처의 전화 번호 읽기 (0) | 2020.11.06 |
---|---|
Xcode를 사용하면 iOS 장치에서만 실행할 수 있습니다 (시뮬레이터 없음). (0) | 2020.11.06 |
Android : UnknownHostException (0) | 2020.11.06 |
Ruby 설치 후 MAC OS X에서 잘못된 활성 개발자 경로 (0) | 2020.11.06 |
Angular CLI를 제거하는 방법은 무엇입니까? (0) | 2020.11.06 |