Java에서 정수로 이중 캐스트
어떤 식으로든java.lang.Double
로.java.lang.Integer
?
그것은 예외를 만든다.
"198.1994.ClassCastException: java.lang.java.lang과 이중으로 호환되지 않습니다.정수"
다음과 같은 메서드 intValue()를 사용하여 int 값을 명시적으로 취득해야 합니다.
Double d = 5.25;
Integer i = d.intValue(); // i becomes 5
아니면
double d = 5.25;
int i = (int) d;
A Double
가 아니다Integer
캐스팅이 안 돼요.의 차이점에 주의해 주세요.Double
클래스 및double
원시적인또, A는Double
는 입니다.Number
그 때문에, 다음과 같은 방법이 있습니다. intValue
이 값을 사용하여 원시 값을 얻을 수 있습니다.int
.
그 뒤에 있는 함정과 추론을 다루지 않고는 다른 답을 이해하는 것은 불가능하다고 생각합니다.
직접 캐스팅할 수 없습니다.Integer
에 대해서Double
물건.또한.Double
그리고.Integer
는 불변의 객체이므로 어떤 방법으로도 수정할 수 없습니다.
각 숫자 클래스에는 원시적인 대안이 있습니다.Double
대double
,Integer
대int
, ...). 이러한 프리미티브는 소문자로 시작합니다(예:int
클래스/오브젝트가 아님을 나타냅니다.그 말은 그들이 방법을 가지고 있지 않다는 뜻이기도 합니다.반면 클래스(예:Integer
)는, 이러한 프리미티브의 주위에 박스나 클립과 같이 동작하기 때문에, 오브젝트처럼 사용할 수 있습니다.
전략:
변환하려면Double
에 대해서Integer
다음 전략을 따라야 합니다.
- 변환하다
Double
원시인에게 반대하다double
. (= "해제") - 프리미티브 변환
double
원시인에게int
. (= "주조") - 프리미티브 변환
int
로 되돌아가다Integer
물건.(= "실행")
코드:
// starting point
Double myDouble = Double.valueOf(10.0);
// step 1: unboxing
double dbl = myDouble.doubleValue();
// step 2: casting
int intgr = (int) dbl;
// step 3: boxing
Integer val = Integer.valueOf(intgr);
사실 지름길이 있어요.에서 즉시 개봉할 수 있습니다.Double
원초적인 것으로 곧장int
이렇게 하면 2단계를 완전히 건너뛸 수 있습니다.
Double myDouble = Double.valueOf(10.0);
Integer val = Integer.valueOf(myDouble.intValue()); // the simple way
함정:
다만, 위 코드에 포함되지 않은 것이 많이 있습니다.위의 코드는 null-safe가 아닙니다.
Double myDouble = null;
Integer val = Integer.valueOf(myDouble.intValue()); // will throw a NullPointerException
// a null-safe solution:
Integer val = (myDouble == null)? null : Integer.valueOf(myDouble.intValue());
현재 대부분의 값에서 정상적으로 작동합니다.단, 정수의 범위는 매우 작습니다(최소값/최대값).Double
또한, 복수는 정수가 보유할 수 없는 "특수값"을 보유할 수 있다.
- 1/0 = +표준
- -1/0 = -표준
- 0/0 = 정의되지 않음(NaN)
따라서 응용 프로그램에 따라 불쾌한 예외를 피하기 위해 필터링을 추가할 수 있습니다.
그리고 다음 단점은 반올림 전략입니다.기본적으로는 Java는 항상 반올림합니다.반올림은 모든 프로그래밍 언어에서 완벽하게 의미가 있습니다.기본적으로 Java는 일부 바이트를 버립니다.재무 어플리케이션에서는 반드시 하프업 라운딩을 사용할 필요가 있습니다(예: round(0.5) = 1
★★★★★★★★★★★★★★★★★」round(0.4) = 0
를 참조해 주세요.
// null-safe and with better rounding
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = Integer.valueOf(rounded);
자동 박스화(un)
이 경우 자동 박스를 사용하고 싶을 수도 있지만, 저는 사용하지 않습니다.만약 당신이 이미 곤경에 처해 있다면, 다음 예들도 그렇게 명백하지 않을 것이다.오토박스의 내부를 모르는 경우는 사용하지 말아 주세요.
Integer val1 = 10; // works
Integer val2 = 10.0; // doesn't work
Double val3 = 10; // doesn't work
Double val4 = 10.0; // works
Double val5 = null;
double val6 = val5; // doesn't work (throws a NullPointerException)
다음 사항은 놀랄 일이 아닐 겁니다.하지만 만약 그렇다면, 당신은 자바에서의 캐스팅에 관한 기사를 읽고 싶을 것이다.
double val7 = (double) 10; // works
Double val8 = (Double) Integer.valueOf(10); // doesn't work
Integer val9 = (Integer) 9; // pure nonsense
값 선호:
,, 용, 용, 용, 사, also, also, also, also, also, also, also, also, also, also, also, also, also, also, also, also, also,new Integer()
이치노valueOf()
메서드는 캐시를 사용하기 때문에 더 좋습니다.이러한 방법을 사용하는 것은 좋은 습관입니다. 왜냐하면 그것들은 때때로 여러분의 기억을 절약할 수 있기 때문입니다.
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = new Integer(rounded); // waste of memory
세 가지 가능성이 보입니다.처음 두 자리는 숫자를 자르고 마지막 두 자리는 가장 가까운 정수로 반올림합니다.
double d = 9.5;
int i = (int)d;
//i = 9
Double D = 9.5;
int i = Integer.valueOf(D.intValue());
//i = 9
double d = 9.5;
Long L = Math.round(d);
int i = Integer.valueOf(L.intValue());
//i = 10
가장 은 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.intValue()
그러나 이것은 정수 부분을 반환할 뿐이며 반올림은 수행되지 않습니다.Double 값에 가장 가까운 Integer를 원하는 경우 다음을 수행해야 합니다.
Integer integer = Integer.valueOf((int) Math.round(myDouble)));
또한 null 대소문자도 잊지 마십시오.
Integer integer = myDouble == null ? null : Integer.valueOf((int) Math.round(myDouble)));
Math.round()
무한대나 NaN과 같은 이상한 오리 사건을 비교적 우아하게 처리하죠
다음과 같이 합니다.
Double foo = 123.456;
Integer bar = foo.intValue();
double a = 13.34;
int b = (int) a;
System.out.println(b); //prints 13
그냥 이렇게 하면...
Double d = 13.5578;
int i = d.intValue();
System.out.println(i);
Double d = 100.00;
Integer i = d.intValue();
오토박싱에도 대응하고 있다는 것도 덧붙여야 합니다.
그 이외의 경우는, int(primitive)를 취득해, 거기서 Integer를 취득할 수 있습니다.
Integer i = new Integer(d.intValue());
★★intValue()
Double
★★★★★★ 。
이 작업은 "좁음 또는 명시적 유형 변환", 이중 → 긴 → int를 사용하여 수행할 수 있습니다.잘 됐으면 좋겠어요.
double d = 100.04;
long l = (long)d; // Explicit type casting required
int i = (int)l; // Explicit type casting required
PS: double은 모든 10진수 값이 있고 왼쪽에 아무것도 없기 때문에 0이 됩니다.0.58의 경우 0으로 좁혀집니다.하지만 다른 사람들에게는 마법이 통할 것이다.
이거 드셔보세요.
double doubleValue = 6.5;Double doubleObj = new Double(doubleValue);int intResult = doubleObj.intValue();
Double과 Integer는 각각 double과 int의 Java 프리미티브 래퍼 클래스입니다.그 사이에 캐스팅을 할 수는 있지만 부동 소수점을 잃게 됩니다.즉, int에 캐스트된 5.4는 5가 됩니다.원래대로 되돌리면 5.0이 됩니다.
인 것을 할 수 .double
나서, 에, 에, 에, 에, 에, 에, 에, 에, 에, 에, 에, 에, 에, 에, 에.int
」에 자동 .Integer
.
Double d = 20.3;
Integer i = (int) (double) d; //20
//To obtain primitive:
int i2 = (int) (double) d;
Double의 intValue 방법을 사용하면 됩니다.
Double initialValue = 7.12;
int finalValue = initialValue.intValue();
하다를 사용하세요.doubleNumber.intValue();
★★★★★★ 。
번째로 은 '어느 쪽인가'입니다.Double
double
.
예
int intResult = newDoubleObj.intValue();
이미 생성된 Double 인스턴스를 공유하기 때문에 메모리 효율이 우수합니다.
Double.valueOf(Math.floor(54644546464/60*60*24*365)).intValue()
나한테는 효과가 있었어.이것을 시험해 보세요.
double od = Double.parseDouble("1.15");
int oi = (int) od;
언급URL : https://stackoverflow.com/questions/9102318/cast-double-to-integer-in-java
'programing' 카테고리의 다른 글
리스트에서 요소의 발생 횟수를 카운트하는 방법 (0) | 2022.07.29 |
---|---|
Vuex Getters는 참조(어레이, 객체 등)를 상태로 반환합니까? (0) | 2022.07.29 |
Viewify 메인 드로어/내비게이션에서 하위 메뉴를 만드는 방법 (0) | 2022.07.29 |
헤더 파일의 변수 선언 - 정적입니까? (0) | 2022.07.29 |
Vuex, 어레이에 있는 개체의 속성을 업데이트하면 여러 변환 방법이 발생합니다. (0) | 2022.07.29 |