Standard Deviation & Variance Calculator

Results will appear here after calculation.

${result.error}

`; downloadBtn.style.display = 'none'; calculationResult = null; return; } const dataTypeText = result.dataType === 'population' ? 'Population' : 'Sample'; const varianceSymbol = result.dataType === 'population' ? '\u03C3\u00B2' : 's\u00B2'; // σ² or s² const stdDevSymbol = result.dataType === 'population' ? '\u03C3' : 's'; // σ or s resultsDiv.innerHTML = `

Results (${dataTypeText})

`; resultsDiv.innerHTML += `

Count (n): ${result.count}

`; resultsDiv.innerHTML += `

Sum (Σx): ${formatNumber(result.sum)}

`; resultsDiv.innerHTML += `

Mean (${dataTypeText === 'Population' ? '\u03BC' : 'x\u0304'}): ${formatNumber(result.mean)}

`; // μ or x̄ resultsDiv.innerHTML += `

Sum of Squares (Σx²): ${formatNumber(result.sumSq)}

`; resultsDiv.innerHTML += `

Variance (${varianceSymbol}): ${formatNumber(result.variance)}

`; resultsDiv.innerHTML += `

Standard Deviation (${stdDevSymbol}): ${formatNumber(result.stdDev)}

`; calculationResult = result; // Store for PDF downloadBtn.style.display = 'inline-block'; // Show download button } // --- Generate and Download PDF --- function downloadPDF() { if (!calculationResult || calculationResult.error) return; const doc = new jsPDF(); const { count, sum, sumSq, mean, variance, stdDev, dataType } = calculationResult; // --- Get Colors --- const styles = getComputedStyle(document.querySelector('.sdv-calculator-container')); const primaryColor = styles.getPropertyValue('--sdv-primary-color').trim(); const textColor = styles.getPropertyValue('--sdv-text-color').trim(); const labelColor = styles.getPropertyValue('--sdv-label-color').trim(); // --- PDF Content --- const lineHeight = 7; const margin = 15; let currentY = 20; // Title doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text("Statistical Calculation Results", doc.internal.pageSize.getWidth() / 2, currentY, { align: 'center' }); currentY += lineHeight * 1.5; // Data Type doc.setFontSize(12); doc.setTextColor(textColor); doc.text(`Data Type: ${dataType === 'population' ? 'Population' : 'Sample'}`, margin, currentY); currentY += lineHeight * 2; // Results Table (simple text alignment) const results = [ { label: "Count (n):", value: count }, { label: "Sum (Σx):", value: formatNumber(sum) }, { label: `Mean (${dataType === 'Population' ? 'μ' : 'x̄'}):`, value: formatNumber(mean) }, { label: "Sum of Squares (Σx²):", value: formatNumber(sumSq) }, { label: `Variance (${dataType === 'population' ? 'σ²' : 's²'}):`, value: formatNumber(variance) }, { label: `Standard Deviation (${dataType === 'population' ? 'σ' : 's'}):`, value: formatNumber(stdDev) } ]; doc.setFontSize(11); const labelX = margin; const valueX = doc.internal.pageSize.getWidth() / 2; // Position values around the middle results.forEach(item => { doc.setFont("helvetica", "bold"); doc.setTextColor(labelColor); doc.text(item.label, labelX, currentY); doc.setFont("courier", "normal"); // Use monospace for values doc.setTextColor(textColor); doc.text(item.value, valueX, currentY); currentY += lineHeight * 1.5; // Increase spacing between lines }); // --- Save PDF --- doc.save('statistics_results.pdf'); } // --- Event Listeners --- calculateBtn.addEventListener('click', () => { const parseResult = parseData(); const selectedType = document.querySelector('input[name="sdv-datatype"]:checked').value; if (parseResult.error) { displayResults({ error: parseResult.error }); } else { const statsResult = calculateStats(parseResult.data, selectedType); displayResults(statsResult); } }); downloadBtn.addEventListener('click', downloadPDF); // Clear error messages when input changes dataInput.addEventListener('input', () => { if (resultsDiv.querySelector('.sdv-error')) { resultsDiv.innerHTML = '

Results will appear here after calculation.

'; downloadBtn.style.display = 'none'; calculationResult = null; } }); // --- Initial Setup --- resultsDiv.innerHTML = '

Enter data, select data type, and click "Calculate".

'; downloadBtn.style.display = 'none'; // Ensure download button is hidden initially })(); // IIFE
Scroll to Top