Signatur
Beschreibung
getFloat32() liest ab einer beliebigen Byte-Position im zugrunde liegenden ArrayBuffer (oder SharedArrayBuffer) genau 4 Bytes und interpretiert sie als Gleitkommazahl mit einfacher Genauigkeit nach IEEE 754. Das Ergebnis wird in eine normale JavaScript-number (64-Bit-Double) umgewandelt.
Die Methode eignet sich besonders zum Parsen von Binärformaten – etwa 3D-Modelle (STL, glTF-Puffer), Audio-Samples, Sensordaten, Netzwerkprotokolle über WebSocket oder WebRTC oder eigene Dateiformate. Anders als ein Float32Array kann ein DataView an beliebigen, auch nicht ausgerichteten Offsets lesen und die Byte-Reihenfolge (Endianness) pro Aufruf festlegen.
Wichtig: Ohne zweites Argument liest getFloat32() in Big-Endian-Reihenfolge. Die meisten Dateiformate und praktisch alle heutigen CPUs nutzen dagegen Little-Endian – in diesem Fall muss littleEndian auf true gesetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $byteOffset Pflicht | number | Position in Bytes, gemessen vom Anfang des DataView (nicht des Puffers), ab der gelesen wird. Muss so gewählt sein, dass byteOffset + 4 <= view.byteLength gilt. |
|
| $littleEndian | boolean | false | true liest im Little-Endian-Format, false bzw. weggelassen im Big-Endian-Format. |
Rückgabewert
number. Kann auch NaN, Infinity, -Infinity oder -0 sein.Beispiele
Wert schreiben und wieder auslesen
const buffer = new ArrayBuffer(4);
const view = new DataView(buffer);
view.setFloat32(0, 0.1);
// Beim Lesen merkt man den Genauigkeitsverlust von 32 Bit
console.log(view.getFloat32(0));
console.log(view.getFloat32(0) === Math.fround(0.1));
Endianness entscheidet über das Ergebnis
// Bytes von 1.0 im Little-Endian-Format
const bytes = new Uint8Array([0x00, 0x00, 0x80, 0x3f]);
const view = new DataView(bytes.buffer);
console.log(view.getFloat32(0, true)); // Little-Endian: richtig
console.log(view.getFloat32(0)); // Big-Endian (Standard): falsch interpretiert
Vertex-Daten (x, y, z) aus einem Binärpuffer lesen
// Simuliert einen Binärpuffer: 4-Byte-Header + 2 Vertices à 3 Floats
const buffer = new ArrayBuffer(4 + 2 * 12);
const writer = new DataView(buffer);
writer.setUint32(0, 2, true); // Anzahl der Vertices
[1.5, -2, 3.25, 0, 10, -0.5].forEach((v, i) => writer.setFloat32(4 + i * 4, v, true));
const readVertices = (buf) => {
const view = new DataView(buf);
const count = view.getUint32(0, true);
const vertices = [];
for (let i = 0; i < count; i++) {
const offset = 4 + i * 12; // Stride: 3 × 4 Bytes
vertices.push({
x: view.getFloat32(offset, true),
y: view.getFloat32(offset + 4, true),
z: view.getFloat32(offset + 8, true),
});
}
return vertices;
};
console.log(readVertices(buffer));
Fehler bei Lesezugriff außerhalb des Puffers abfangen
const view = new DataView(new ArrayBuffer(6));
try {
view.getFloat32(3); // bräuchte Bytes 3–6, Puffer hat nur 0–5
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Standard ist Big-Endian: Ohne
littleEndian = trueliest die Methode Big-Endian. EinFloat32Arrayverwendet dagegen die Byte-Reihenfolge der Plattform (fast immer Little-Endian). Das ist eine häufige Fehlerquelle beim Parsen von Dateien. - Genauigkeit: Float32 hat nur etwa 7 signifikante Dezimalstellen. Werte wie
0.1kommen nach einem Hin- und Rückweg als0.10000000149011612zurück. Für VergleicheMath.fround()verwenden. - RangeError, wenn
byteOffsetnegativ ist oderbyteOffset + 4größer alsbyteLengthdes Views ist. Nicht ganzzahlige Offsets werden abgeschnitten. - TypeError, wenn der zugrunde liegende
ArrayBufferabgetrennt wurde (etwa nachpostMessagemit Transfer oderArrayBuffer.prototype.transfer()). - Nicht ausgerichtete Offsets (z. B. 1 oder 3) sind erlaubt – ein Vorteil gegenüber
Float32Array, das ausgerichtete Offsets verlangt. - NaN-Bitmuster (Payload) bleiben beim Lesen nicht garantiert erhalten.
- Für Gleitkommazahlen mit halber Genauigkeit gibt es
getFloat16()(ES2025, noch nicht in allen Umgebungen verfügbar).