OneCompiler

Comprehensive calculator

1671
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Comprehensive Calculator</title> <style> body { font-family: Arial, sans-serif; display: flex; flex-direction: column; align-items: center; margin: 20px; } #calculator { border: 2px solid #333; padding: 20px; width: 320px; text-align: center; } #screen { width: 90%; padding: 10px; font-size: 20px; text-align: right; margin-bottom: 10px; border: 1px solid #ddd; } .button-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; } .button { padding: 15px; font-size: 16px; cursor: pointer; } .converter-section { margin-top: 10px; } </style> </head> <body>
<h1>Comprehensive Calculator</h1>

<div id="calculator">
    <input type="text" id="screen" placeholder="0" disabled>
    
    <div class="button-grid">
        <button class="button" onclick="appendToScreen('1')">1</button>
        <button class="button" onclick="appendToScreen('2')">2</button>
        <button class="button" onclick="appendToScreen('3')">3</button>
        <button class="button" onclick="setOperation('+')">+</button>

        <button class="button" onclick="appendToScreen('4')">4</button>
        <button class="button" onclick="appendToScreen('5')">5</button>
        <button class="button" onclick="appendToScreen('6')">6</button>
        <button class="button" onclick="setOperation('-')">-</button>

        <button class="button" onclick="appendToScreen('7')">7</button>
        <button class="button" onclick="appendToScreen('8')">8</button>
        <button class="button" onclick="appendToScreen('9')">9</button>
        <button class="button" onclick="setOperation('*')">×</button>

        <button class="button" onclick="clearScreen()">C</button>
        <button class="button" onclick="appendToScreen('0')">0</button>
        <button class="button" onclick="calculate()">=</button>
        <button class="button" onclick="setOperation('/')">÷</button>
    </div>

    <!-- Additional Operations -->
    <div class="button-grid">
        <button class="button" onclick="calculateTrigonometry('sin')">sin</button>
        <button class="button" onclick="calculateTrigonometry('cos')">cos</button>
        <button class="button" onclick="calculateTrigonometry('tan')">tan</button>
        <button class="button" onclick="calculateFactorial()">n!</button>

        <button class="button" onclick="calculateFibonacci()">Fib</button>
    </div>

    <!-- Converters -->
    <div class="converter-section">
        <h3>Currency Converter</h3>
        <input type="number" id="currencyInput" placeholder="Amount">
        <select id="currencySelect">
            <option value="usdToEur">USD to EUR</option>
            <option value="eurToUsd">EUR to USD</option>
            <option value="pkrtousd">PKR TO USD</option>
            <option value="usdtopkr">USD TO PKR</option>
        </select>
        <button onclick="convertCurrency()">Convert</button>
        <p id="currencyResult"></p>
    </div>

    <div class="converter-section">
        <h3>Temperature Converter</h3>
        <input type="number" id="tempInput" placeholder="Temperature">
        <select id="tempSelect">
            <option value="cToF">Celsius to Fahrenheit</option>
            <option value="fToC">Fahrenheit to Celsius</option>
        </select>
        <button onclick="convertTemperature()">Convert</button>
        <p id="tempResult"></p>
    </div>

    <div class="converter-section">
        <h3>Distance Converter</h3>
        <input type="number" id="distanceInput" placeholder="Distance">
        <select id="distanceSelect">
            <option value="kmToMiles">Kilometers to Miles</option>
            <option value="milesToKm">Miles to Kilometers</option>
        </select>
        <button onclick="convertDistance()">Convert</button>
        <p id="distanceResult"></p>
    </div>

    <div class="converter-section">
        <h3>Time Converter</h3>
        <input type="number" id="timeInput" placeholder="Time">
        <select id="timeSelect">
            <option value="hoursToMinutes">Hours to Minutes</option>
            <option value="minutesToSeconds">Minutes to Seconds</option>
        </select>
        <button onclick="convertTime()">Convert</button>
        <p id="timeResult"></p>
    </div>
</div>

<script>
    let currentOperation = '';
    let screen = document.getElementById('screen');

    function appendToScreen(value) {
        if (screen.value == '0') screen.value = '';
        screen.value += value;
    }

    function setOperation(op) {
        currentOperation = op;
        screen.value += ` ${op} `;
    }

    function calculate() {
        try {
            screen.value = eval(screen.value.replace('×', '*').replace('÷', '/'));
        } catch (error) {
            screen.value = "Error";
        }
    }

    function clearScreen() {
        screen.value = '0';
    }

    function calculateTrigonometry(func) {
        let num = parseFloat(screen.value);
        if (func === 'sin') screen.value = Math.sin(num * Math.PI / 180).toFixed(4);
        else if (func === 'cos') screen.value = Math.cos(num * Math.PI / 180).toFixed(4);
        else if (func === 'tan') screen.value = Math.tan(num * Math.PI / 180).toFixed(4);
    }

    function calculateFactorial() {
        let num = parseInt(screen.value);
        let result = 1;
        for (let i = 1; i <= num; i++) result *= i;
        screen.value = result;
    }

    function calculateFibonacci() {
        let n = parseInt(screen.value);
        let series = [0, 1];
        for (let i = 2; i < n; i++) {
            series.push(series[i - 1] + series[i - 2]);
        }
        screen.value = series.slice(0, n).join(", ");
    }

    function convertCurrency() {
        let amount = parseFloat(document.getElementById('currencyInput').value);
        let conversion = document.getElementById('currencySelect').value;
        let result;
        if (conversion === "usdToEur") result = amount * 0.85;
        else if (conversion === "eurToUsd") result = amount * 1.18;
        if (conversion === "pkrtousd") result = amount / 280;
        else if (conversion === "usdtopkr") result = amount * 280;
        document.getElementById('currencyResult').textContent = `Converted Amount: ${result.toFixed(2)}`;
    }

    function convertTemperature() {
        let temp = parseFloat(document.getElementById('tempInput').value);
        let conversion = document.getElementById('tempSelect').value;
        let result;
        if (conversion === "cToF") result = (temp * 9/5) + 32;
        else if (conversion === "fToC") result = (temp - 32) * 5/9;
        document.getElementById('tempResult').textContent = `Converted Temperature: ${result.toFixed(2)}`;
    }

    function convertDistance() {
        let distance = parseFloat(document.getElementById('distanceInput').value);
        let conversion = document.getElementById('distanceSelect').value;
        let result;
        if (conversion === "kmToMiles") result = distance * 0.621371;
        else if (conversion === "milesToKm") result = distance * 1.60934;
        document.getElementById('distanceResult').textContent = `Converted Distance: ${result.toFixed(2)}`;
    }

    function convertTime() {
        let time = parseFloat(document.getElementById('timeInput').value);
        let conversion = document.getElementById('timeSelect').value;
        let result;
        if (conversion === "hoursToMinutes") result = time * 60;
        else if (conversion === "minutesToSeconds") result = time * 60;
        document.getElementById('timeResult').textContent = `Converted Time: ${result}`;
    }
</script>
</body> </html>