Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript DataView.getFloat64() 함수 사용법과 예제 총정리

DataView 객체의 getFloat64() 메서드는 ArrayBuffer에서 지정된 바이트 오프셋 위치에 저장된 부호 있는 64비트 부동소수점 수(배정밀도 실수)를 읽어 그 값을 반환합니다. 이진 데이터를 정밀하게 다루어야 할 때 유용하게 사용됩니다.

문법(Syntax)

getFloat64() 메서드의 기본 문법은 다음과 같습니다.

dataView.getFloat64(byteOffset, littleEndian);

매개변수 설명

byteOffset: 데이터를 읽기 시작할 버퍼 내의 바이트 위치로, 필수로 지정해야 합니다.
littleEndian(선택): 값을 리틀 엔디안(little-endian) 방식으로 읽을지 여부를 결정하는 불리언 값입니다. 생략하거나 false를 지정하면 빅 엔디안(big-endian) 방식으로 처리됩니다.

기본 사용 예제

다음 예제는 setFloat64()로 값을 저장한 뒤, 같은 위치에서 getFloat64()로 값을 읽어오는 과정을 보여줍니다.

<html>
<head>
   <title>JavaScript Example</title>
</head>
<body>
   <script type="text/javascript">
      var arrayBuffer = new ArrayBuffer(20);
      var dataView = new DataView(arrayBuffer);
      dataView.setFloat64(1, 654.44);
      document.write(dataView.getFloat64(1));
   </script>
</body>
</html>

실행 결과

654.44

Math 상수를 활용한 예제

이 메서드에는 일반 숫자뿐만 아니라 Math 객체가 제공하는 상수나 함수의 결과값도 전달할 수 있습니다. 아래 예제는 자연로그의 밑(e)의 밑이 2인 로그값인 Math.LOG2E를 저장하고 다시 읽어옵니다.

<html>
<head>
   <title>JavaScript Example</title>
</head>
<body>
   <script type="text/javascript">
      var arrayBuffer = new ArrayBuffer(20);
      var dataView = new DataView(arrayBuffer);
      dataView.setFloat64(1, Math.LOG2E);
      document.write(dataView.getFloat64(1));
   </script>
</body>
</html>

실행 결과

1.4426950408889634

저장된 값이 없을 경우의 동작

DataView에 아무런 값도 저장하지 않은 상태에서 getFloat64()를 호출하면 에러가 발생하는 것이 아니라 NaN(Not a Number)이 반환됩니다. 이는 해당 메모리 위치가 초기화되지 않았음을 의미하므로, 값을 읽기 전에 반드시 setFloat64() 등으로 초기화했는지 확인하는 것이 좋습니다.

<html>
<head>
   <title>JavaScript Example</title>
</head>
<body>
   <script type="text/javascript">
      var arrayBuffer = new ArrayBuffer(20);
      var dataView = new DataView(arrayBuffer);
      dataView.setFloat64(1);
      document.write(dataView.getFloat64(1));
   </script>
</body>
</html>

실행 결과

NaN

정리

getFloat64()는 ArrayBuffer 내부의 이진 데이터를 배정밀도 실수로 손쉽게 읽어올 수 있게 해주는 메서드입니다. 바이트 오프셋과 엔디안 옵션을 적절히 활용하면 네트워크 프로토콜 처리나 파일 파싱처럼 정밀한 이진 데이터 조작이 필요한 작업에서 안정적으로 사용할 수 있습니다.