나는 float 배열을 가지고 있으며 자바에서 double 배열로 변환하고 싶습니다. 배열을 반복하고 새 배열을 만드는 확실한 방법을 알고 있습니다. 나는 자바가 double []으로 작업하기를 원하는 곳에서 float []을 부드럽게 소화 할 것이라고 기대했지만, 이것으로는 작동하지 않는다. 이 전환을 우아하고 효과적으로 수행 할 수있는 방법은 무엇입니까?자바에서 float 배열을 double 배열로 변환하는 방법은 무엇입니까?
답변
기본적으로 무언가은 각 값의 변환을 수행해야합니다. JITting 이후에 처리하는 데 사용되는 코드가 다르기 때문에 두 배열 유형 사이에 암시 적 변환이 없습니다. 요소 크기가 다르므로 float은 변환이 필요하지만 double은 그렇지 않습니다. 데이터를 읽을 때 변환이 필요하지 않은 참조 유형에 대한 배열 공분산과 비교하십시오 (비트 패턴은 Object 참조와 같은 String 참조와 동일하며 요소 크기는 모든 참조 유형에 동일 함).
간단히 말해서, 뭔가가 루프에서 변환을 수행해야합니다. 이 작업을 수행하는 기본 제공 방법에 대해서는 알지 못합니다. 나는 어딘가에 제 3 자 라이브러리에 존재한다고 확신하지만, 이미 그러한 라이브러리 중 하나를 사용하지 않는다면, 나는 당신 만의 방법을 쓸 것입니다. 편의상 예제 구현은 다음과 같습니다.
public static double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
{
return null; // Or throw an exception - your choice
}
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
{
output[i] = input[i];
}
return output;
}
확장 메소드로 사용할 수도 있습니다. – Seth
@Seth : 이것은 C#이 아닌 Java입니다. –
'convertToDoubles' 또는'toDoubles'라고 이름을 붙일 수있어 다른 원시적 (및 박스형)의 과부하를 제공 할 수 있습니다. –
실제로 float 배열을 이중 배열로 복사해야합니까? 당신은 당신이 사용할 수있는 수레를 ... 사용하는 경우 컴파일러 및 유형에 문제가
float x = 0;
double d = Double.valueOf(x);
사본을 복용하여 어떤 이점을 얻을 수 있습니까?하는 경우 부동 소수점 기반의 계산 결과에 더 높은 정밀도가 필요한 경우 결과를 double
으로 지정하십시오. 배열의 복사본을 가지고 복사 기능을 수행하는 데 많은 단점이 있음을 알 수 있습니다. 특히 크기가 큰 경우에는 더욱 그렇습니다. 정말로해야하는지 확인하십시오.
IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
을하지만 (청소기, 더 빨리, 더 의미가) 존 소총의 기능을 사용하는 것이 좋습니다 :
이나는 플로트 []에서 데이터를 가지고있는 동안'double []'을 필요로하는 메소드를 호출하는 아주 분명한 이유가있다. 분명히, –
그러나 OP는 그것을 언급하지 않는다. 나는 그가 그것을 요구 한 이후로 대안을주고 싶었다. – Simon
Andreas_D가 설명했습니다. 나는 서로 놀기 위해 두 개의 도서관을 만들 필요가있었습니다. 그 중 하나는 double [] 벡터로, 다른 하나는 float [] (수학적으로 의미있는 벡터)로 작동합니다. 배열을 캐스팅하는 자바 문제는 이러한 라이브러리와 일치하는 것은 그리 간단하지 않습니다. 배열을 반복하지 않아도 솔루션이 존재하지 않는 것 같습니다. 답장을 보내 주셔서 감사합니다. – fifigyuri
자바 (8)에서 당신이, 당신이 정말로 원하는 수있는 경우 HTH는 않습니다.
Jon Skeet의 것이 더 좋다고 나는 사지 않습니다. 사실, 이것은 훨씬 더 빨리 최적화되고 동시에 수행 될 수 있습니다.무슨 일이 일어나고 있고 (double []) floatArray와 동등한 함수가 될지도 모릅니다. 스트림을 사용하는 이유는 컴파일러에게 우리가 어떻게 처리했는지 또는 어떤 순서로 상관하지 않는지를 알려주고 모든 값을 다른 것들에 매핑하기 위해서입니다. 그것들을 외부로 반복하기보다는. – Tatarize
- 1. VB.NET에서 double 배열을 바이트 배열로 변환 하시겠습니까?
- 2. double *을 배열로 변환하는 방법 <double> (6)
- 3. 자바에서 이미지를 바이트 배열로 변환하는 방법?
- 4. 문자열을 배열로 변환하는 방법은 무엇입니까?
- 5. double [] [] in을 float [] []로 변환
- 6. 동적 배열을 C++에서 정적 배열로 변환하는 방법은 무엇입니까?
- 7. PNG 이미지를 바이트 배열로 변환하는 방법은 무엇입니까?
- 8. # BitConverter.GetBytes (float/double) 형식?
- 9. 루비 float double 0
- 10. Perl에서 배열 참조를 배열로 변환하는 방법은 무엇입니까?
- 11. long 배열을 문자열 배열로 변환
- 12. C에서 double 배열을 shmget하고 shmat하는 방법은 무엇입니까?
- 13. double array에서 float 배열로의 C++ memcpy
- 14. 없이 배열로 배열을 변환하는 방법 =. PHP에서?
- 15. 최대 허용치는 무엇입니까? iPhone의 double/float 값?
- 16. float vs double 그래픽 하드웨어
- 17. typedview를 배열로 변환하는 방법
- 18. 대리자를 바이트 배열로 변환하는 방법은 무엇입니까?
- 19. MATLAB 출력을 배열로 변환하는 방법은 무엇입니까?
- 20. .NET에서 문자열을 바이트 배열로 변환하는 방법은 무엇입니까?
- 21. JavaScript 리터럴을 JSON 배열로 변환하는 방법은 무엇입니까?
- 22. 컬렉션을 배열로 변환하는 가장 쉬운 방법은 무엇입니까?
- 23. SET을 APEX의 배열로 변환하는 방법은 무엇입니까?
- 24. CvMat을 Numpy 배열로 변환하는 방법은 무엇입니까?
- 25. C에서 바이트 배열로 구조를 변환하는 방법은 무엇입니까?
- 26. 다른 배열로 배열을 설정하는 방법은 무엇입니까?
- 27. 자바에서 2D 문자열 배열을 반환하는 방법은 무엇입니까?
- 28. .WAV 오디오 데이터 샘플을 double 유형으로 변환하는 방법은 무엇입니까?
- 29. 바이트 배열을 비트 배열로 변환 하시겠습니까?
- 30. 자바에서 2 차원 배열로 텍스트 파일을 인쇄하는 방법은 무엇입니까?
float와 double은 크기와 비트 패턴에 따라 완전히 다른 데이터 유형이므로 "우아하게"수행 할 방법이 없습니다. 따라서 명백한 방법이 유일한 방법입니다. –