【生活】选购油烟机

前言:
主包家里的厨房在六楼,油烟可以直接从墙上预留通风口排出,所以以下内容是按主包的实际需求出发的

性价比公式

  • 风量(\(m^3 / min\)):也就是吸力,经常爆炒的至少 20 \(m^3 / min\) 最好
  • 静压(\(Pa\)):也就是排烟能力,能直接排出到室外的,400 ~ 500 \(Pa\) 即可
  • 油脂分离度(%):也就是能从烟气中分离出油脂的能力,国家标准至少 80%
  • 噪音(\(dB\)):国家标准不超过65 \(dB\)

下列参数适用于主包需求,仅供参考:
风量目标值:20 \(m^3 / min\)
静压目标值:450 \(Pa\)
油脂分离度目标值:80%
噪音理想值:45 \(dB\)
噪音上限值:65 \(dB\)
各指标权重:风量0.4,静压0.2,油脂分离度0.2,噪音0.2

风量、静压、油脂分离度 \(指标 = 实际值 \div 目标值\)
噪音 \(指标 = max(0, 1 - (实际值 - 理想值) \div (上限值 - 理想值))\)

\(性价比 = (风量指标 \times A + 静压指标 \times B + 油脂分离度指标 \times C + 噪音指标 \times D) \div 价格\)

A、B、C、D为各指标权重,性价比越大越好

可用于现场计算的HTML代码,参数按需修改:

点击查看代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>油烟机性价比计算器</title>
    <style>
        body {
            font-family: 'Microsoft YaHei', sans-serif;
            margin: 20px;
            background-color: #f5f5f5;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
            background-color: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 {
            text-align: center;
            color: #333;
            margin-bottom: 20px;
        }
        .instructions {
            background-color: #f0f8ff;
            padding: 15px;
            border-radius: 5px;
            margin-bottom: 20px;
            font-size: 14px;
            line-height: 1.5;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-bottom: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 10px;
            text-align: center;
        }
        th {
            background-color: #4CAF50;
            color: white;
            font-weight: bold;
        }
        input {
            width: 90%;
            padding: 5px;
            border: 1px solid #ccc;
            border-radius: 3px;
            text-align: center;
        }
        .best-value {
            background-color: #e8f5e9 !important;
        }
        .footer {
            text-align: center;
            margin-top: 20px;
            font-size: 12px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>油烟机性价比计算器</h1>
        
        <div class="instructions">
            <p><strong>使用说明:</strong></p>
            <p>1. 在表格中输入各油烟机型号的参数和价格</p>
            <p>2. 系统会自动计算每行的性价比得分(已放大10000倍)</p>
            <p>3. 当输入超过2行数据时,性价比最高的行将自动高亮显示为浅绿色</p>
            <p><strong>计算公式:</strong></p>
            <p>风量指标 = 实际风量 / 20</p>
            <p>静压指标 = 实际静压 / 450</p>
            <p>油脂分离度指标 = 实际油脂分离度 / 80</p>
            <p>噪音指标 = max(0, 1 - (实际噪音 - 45) / 20)</p>
            <p>总指标 = 风量指标×0.4 + 静压指标×0.2 + 油脂分离度指标×0.2 + 噪音指标×0.2</p>
            <p>性价比 = 总指标 / 价格 × 10000</p>
        </div>
        
        <table id="comparisonTable">
            <thead>
                <tr>
                    <th>机型名</th>
                    <th>风量 (m³/min)</th>
                    <th>静压 (Pa)</th>
                    <th>油脂分离度 (%)</th>
                    <th>噪音 (dB)</th>
                    <th>价格 (元)</th>
                    <th>性价比(万分之一)</th>
                </tr>
            </thead>
            <tbody>
                <!-- 15行数据输入行 -->
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
                <tr>
                    <td><input type="text" class="model-name"></td>
                    <td><input type="number" class="airflow" min="0" step="0.1"></td>
                    <td><input type="number" class="pressure" min="0"></td>
                    <td><input type="number" class="separation" min="0" max="100" step="0.1"></td>
                    <td><input type="number" class="noise" min="0" step="0.1"></td>
                    <td><input type="number" class="price" min="0" step="1"></td>
                    <td class="value-score">-</td>
                </tr>
            </tbody>
        </table>
        
        <div class="footer">
            <p>注:性价比得分越高,表示该机型在同等价格下性能越好(得分已放大10000倍)</p>
        </div>
    </div>

    <script>
        // 添加输入事件监听器
        document.addEventListener('DOMContentLoaded', function() {
            const tableBody = document.querySelector('#comparisonTable tbody');
            
            tableBody.addEventListener('input', function(e) {
                if (e.target.matches('input')) {
                    const row = e.target.closest('tr');
                    calculateValueScore(row);
                    highlightBestValue();
                }
            });
        });
        
        // 计算性价比
        function calculateValueScore(row) {
            const airflowInput = row.querySelector('.airflow');
            const pressureInput = row.querySelector('.pressure');
            const separationInput = row.querySelector('.separation');
            const noiseInput = row.querySelector('.noise');
            const priceInput = row.querySelector('.price');
            const valueScoreCell = row.querySelector('.value-score');
            
            // 检查所有必需字段是否已填写
            if (airflowInput.value && pressureInput.value && 
                separationInput.value && noiseInput.value && priceInput.value) {
                
                // 解析输入值
                const airflow = parseFloat(airflowInput.value);
                const pressure = parseFloat(pressureInput.value);
                const separation = parseFloat(separationInput.value);
                const noise = parseFloat(noiseInput.value);
                const price = parseFloat(priceInput.value);
                
                // 计算各项指标
                const airflowScore = airflow / 20; // 目标风量20
                const pressureScore = pressure / 450; // 目标静压450
                const separationScore = separation / 80; // 目标油脂分离度80
                const noiseScore = Math.max(0, 1 - (noise - 45) / 20); // 理想噪音45,20就是上限值 - 理想值得到的常数
                
                // 计算总指标(加权平均)
                const totalScore = 
                    airflowScore * 0.4 + 
                    pressureScore * 0.2 + 
                    separationScore * 0.2 + 
                    noiseScore * 0.2;
                
                // 计算性价比并乘以10000
                const valueScore = (totalScore / price) * 10000;
                
                // 显示结果(保留2位小数)
                valueScoreCell.textContent = valueScore.toFixed(2);
            } else {
                valueScoreCell.textContent = '-';
            }
        }
        
        // 高亮性价比最高的行
        function highlightBestValue() {
            const rows = document.querySelectorAll('#comparisonTable tbody tr');
            let bestRow = null;
            let bestScore = -1;
            let validRows = 0;
            
            // 查找最高性价比的行
            rows.forEach(row => {
                const valueScoreCell = row.querySelector('.value-score');
                const scoreText = valueScoreCell.textContent;
                
                if (scoreText !== '-') {
                    validRows++;
                    const score = parseFloat(scoreText);
                    
                    if (score > bestScore) {
                        bestScore = score;
                        bestRow = row;
                    }
                }
            });
            
            // 清除所有高亮
            rows.forEach(row => row.classList.remove('best-value'));
            
            // 如果有超过2行有效数据,高亮最佳行
            if (validRows > 2 && bestRow) {
                bestRow.classList.add('best-value');
            }
        }
    </script>
</body>
</html>

posted @ 2025-10-29 14:24  鼓舞人心的杰克森  阅读(11)  评论(0)    收藏  举报