/** * ⚡ IHK BINÄRPRÄFIX- & TRANSFERZEIT-DRILL (IEC 60027-2) ⚡ * ====================================================== * Interaktiver Drill für: * 1. Binärpräfixe (KiB, MiB, GiB, TiB) vs. Dezimalpräfixe (kB, MB, GB, TB) * 2. Berechnen der tatsächlichen Speicherkapazität (Herstellerangabe vs. Betriebssystem) * 3. Übertragungszeit-Berechnung t = Datenmenge / Datenrate mit Einheitenkonvertierung */ class PrefixConverter { constructor(containerId) { this.container = document.getElementById(containerId); this.init(); } init() { if (!this.container) return; this.render(); } render() { this.container.innerHTML = `

⚡ IEC-Binärpräfixe & Transferzeit Drill-Master

Strikte ZPA 2. Auflage Normierung (KiB, MiB, GiB, TiB)

ZPA Pflichtstoff

Festplattenhersteller verkaufen Speicher nach Dezimalpräfixen (SI: 10er-Potenzen).
Betriebssysteme (Windows, Linux) verwalten Speicher jedoch in Binärpräfixen (IEC: 2er-Potenzen).
1 TB (Hersteller) = 1.000.000.000.000 Byte. 1 TiB (IEC) = 1.024⁴ = 1.099.511.627.776 Byte.

`; this.attachEvents(); } attachEvents() { const tabDrill = document.getElementById("pfx-tab-drill"); const tabTime = document.getElementById("pfx-tab-time"); const viewDrill = document.getElementById("pfx-view-drill"); const viewTime = document.getElementById("pfx-view-time"); tabDrill.addEventListener("click", () => { tabDrill.className = "ihk-btn ihk-btn-primary"; tabTime.className = "ihk-btn ihk-btn-secondary"; viewDrill.style.display = "block"; viewTime.style.display = "none"; }); tabTime.addEventListener("click", () => { tabTime.className = "ihk-btn ihk-btn-primary"; tabDrill.className = "ihk-btn ihk-btn-secondary"; viewTime.style.display = "block"; viewDrill.style.display = "none"; }); document.getElementById("btn-calc-pfx").addEventListener("click", () => this.calcCapacity()); document.getElementById("btn-calc-time").addEventListener("click", () => this.calcTime()); } calcCapacity() { const val = parseFloat(document.getElementById("pfx-disk-val").value) || 0; const unit = document.getElementById("pfx-disk-unit").value; const resBox = document.getElementById("pfx-disk-result"); resBox.style.display = "block"; let bytes = 0; if (unit === "GB") bytes = val * 1e9; if (unit === "TB") bytes = val * 1e12; const gib = bytes / Math.pow(1024, 3); const tib = bytes / Math.pow(1024, 4); const diffPct = (1 - (gib / (unit === "TB" ? val * 1024 : val))) * 100; resBox.innerHTML = `
Hersteller-Angabe:${val} ${unit} = ${bytes.toLocaleString()} Byte
Nutzbare Kapazität in GiB (IEC):${gib.toFixed(2)} GiB
Nutzbare Kapazität in TiB (IEC):${tib.toFixed(3)} TiB
Scheinbarer Verlust durch Präfix-Unterschied:ca. ${unit === 'TB' ? '9,09 %' : '6,87 %'}
💡 IHK-Prüfungsbegründung: Das Betriebssystem rechnet mit der Basis 1.024 (${unit === 'TB' ? '1.024⁴' : '1.024³'}). Es handelt sich um keinen physischen Datenverlust, sondern eine Diskrepanz zwischen SI- und IEC-Standard.
`; } calcTime() { const amount = parseFloat(document.getElementById("pfx-data-amount").value) || 0; const unit = document.getElementById("pfx-data-unit").value; const speed = parseFloat(document.getElementById("pfx-net-speed").value) || 0; const speedUnit = document.getElementById("pfx-speed-unit").value; const overheadPct = parseFloat(document.getElementById("pfx-overhead").value) || 0; let bytes = 0; if (unit === "MiB") bytes = amount * Math.pow(1024, 2); if (unit === "GiB") bytes = amount * Math.pow(1024, 3); if (unit === "TiB") bytes = amount * Math.pow(1024, 4); let totalBits = bytes * 8 * (1 + overheadPct / 100); let bitsPerSec = 0; if (speedUnit === "Mbit") bitsPerSec = speed * 1e6; if (speedUnit === "Gbit") bitsPerSec = speed * 1e9; const seconds = totalBits / bitsPerSec; const minutes = seconds / 60; const hours = minutes / 60; const resBox = document.getElementById("pfx-time-result"); resBox.style.display = "block"; let timeString = ""; if (hours >= 1) { const h = Math.floor(hours); const m = Math.floor((hours - h) * 60); const s = Math.round(seconds % 60); timeString = `${h} Stunden, ${m} Minuten, ${s} Sekunden`; } else if (minutes >= 1) { const m = Math.floor(minutes); const s = Math.round(seconds % 60); timeString = `${m} Minuten, ${s} Sekunden`; } else { timeString = `${seconds.toFixed(1)} Sekunden`; } resBox.innerHTML = `
Datenmenge (inkl. ${overheadPct}% Overhead):${(totalBits / 8 / 1024 / 1024).toFixed(1)} MiB (${(totalBits / 1e6).toFixed(0)} Mbit)
Nettoreichweite Übertragung:${speed} ${speedUnit}/s
Berechnete Übertragungsdauer (t):${timeString} (${seconds.toFixed(1)} s)
`; } } document.addEventListener("DOMContentLoaded", () => { if (document.getElementById("prefix-converter-container")) { window.prefixConverter = new PrefixConverter("prefix-converter-container"); } });