<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>小工具 on Nova Kwok 的思域 FK7 改车笔记</title>
    <link>https://fk7.nova.moe/tools/</link>
    <description>Recent content in 小工具 on Nova Kwok 的思域 FK7 改车笔记</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://fk7.nova.moe/tools/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>乙醇配比计算器</title>
      <link>https://fk7.nova.moe/tools/ethanol/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://fk7.nova.moe/tools/ethanol/</guid>
      <description>&lt;h1 id=&#34;乙醇配比计算器&#34;&gt;乙醇配比计算器&lt;a class=&#34;anchor&#34; href=&#34;#%e4%b9%99%e9%86%87%e9%85%8d%e6%af%94%e8%ae%a1%e7%ae%97%e5%99%a8&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;用于估算在当前油量和当前乙醇比例下，为了达到目标浓度，应该补充多少无水乙醇与汽油。&lt;/p&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;说明：本工具按理想混合计算，默认汽油按 E0 处理，仅用于日常估算参考。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;div class=&#34;ethanol-card&#34;&gt;&#xA;  &lt;h2&gt;输入参数&lt;/h2&gt;&#xA;  &lt;div class=&#34;ethanol-grid&#34;&gt;&#xA;    &lt;label for=&#34;tank-capacity&#34;&gt;油箱容量 (L)&lt;/label&gt;&#xA;    &lt;input id=&#34;tank-capacity&#34; type=&#34;number&#34; min=&#34;1&#34; step=&#34;0.1&#34; value=&#34;50&#34; /&gt;&#xA;    &lt;label for=&#34;current-fuel&#34;&gt;当前油量 (L)&lt;/label&gt;&#xA;    &lt;input id=&#34;current-fuel&#34; type=&#34;number&#34; min=&#34;0&#34; step=&#34;0.1&#34; value=&#34;15&#34; /&gt;&#xA;    &lt;label for=&#34;current-ethanol&#34;&gt;当前乙醇比例 (%)&lt;/label&gt;&#xA;    &lt;input id=&#34;current-ethanol&#34; type=&#34;number&#34; min=&#34;0&#34; max=&#34;85&#34; step=&#34;0.1&#34; value=&#34;0&#34; /&gt;&#xA;    &lt;label for=&#34;target-ethanol&#34;&gt;目标乙醇比例 (%)&lt;/label&gt;&#xA;    &lt;input id=&#34;target-ethanol&#34; type=&#34;number&#34; min=&#34;0&#34; max=&#34;85&#34; step=&#34;0.1&#34; value=&#34;20&#34; /&gt;&#xA;    &lt;label for=&#34;target-volume&#34;&gt;加油后总油量 (L)&lt;/label&gt;&#xA;    &lt;input id=&#34;target-volume&#34; type=&#34;number&#34; min=&#34;0&#34; step=&#34;0.1&#34; value=&#34;50&#34; /&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;button id=&#34;ethanol-calc-btn&#34; type=&#34;button&#34;&gt;计算&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;ethanol-card ethanol-result&#34;&gt;&#xA;  &lt;h2&gt;计算结果&lt;/h2&gt;&#xA;  &lt;p id=&#34;result-main&#34;&gt;请先输入参数并点击「计算」。&lt;/p&gt;&#xA;  &lt;p id=&#34;result-detail&#34;&gt;&lt;/p&gt;&#xA;  &lt;p id=&#34;result-note&#34; class=&#34;ethanol-note&#34;&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;style&gt;&#xA;  .ethanol-card {&#xA;    background: #fff;&#xA;    border: 1px solid #e7e7e7;&#xA;    border-radius: 12px;&#xA;    padding: 16px;&#xA;    margin: 14px 0;&#xA;    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);&#xA;  }&#xA;&#xA;  .ethanol-grid {&#xA;    display: grid;&#xA;    grid-template-columns: 1fr;&#xA;    gap: 8px;&#xA;  }&#xA;&#xA;  .ethanol-grid label {&#xA;    font-size: 14px;&#xA;    color: #444;&#xA;    margin-top: 8px;&#xA;  }&#xA;&#xA;  .ethanol-grid input {&#xA;    width: 100%;&#xA;    box-sizing: border-box;&#xA;    border: 1px solid #d5d5d5;&#xA;    border-radius: 8px;&#xA;    padding: 10px 12px;&#xA;    font-size: 16px;&#xA;  }&#xA;&#xA;  #ethanol-calc-btn {&#xA;    margin-top: 14px;&#xA;    width: 100%;&#xA;    border: none;&#xA;    border-radius: 8px;&#xA;    padding: 11px 12px;&#xA;    font-size: 16px;&#xA;    font-weight: 600;&#xA;    color: #fff;&#xA;    background: #2962ff;&#xA;    cursor: pointer;&#xA;  }&#xA;&#xA;  #ethanol-calc-btn:hover {&#xA;    background: #1f53de;&#xA;  }&#xA;&#xA;  .ethanol-result p {&#xA;    margin: 10px 0;&#xA;  }&#xA;&#xA;  #result-main {&#xA;    font-size: 22px;&#xA;    font-weight: 700;&#xA;    color: #1f4ed6;&#xA;  }&#xA;&#xA;  .ethanol-note {&#xA;    color: #8a4a00;&#xA;  }&#xA;&lt;/style&gt;&#xA;&lt;script&gt;&#xA;  (function () {&#xA;    function getInput(id) {&#xA;      return document.getElementById(id);&#xA;    }&#xA;&#xA;    function getValue(id) {&#xA;      var value = Number(getInput(id).value);&#xA;      return Number.isFinite(value) ? value : NaN;&#xA;    }&#xA;&#xA;    function setResult(main, detail, note) {&#xA;      document.getElementById(&#34;result-main&#34;).textContent = main;&#xA;      document.getElementById(&#34;result-detail&#34;).textContent = detail || &#34;&#34;;&#xA;      document.getElementById(&#34;result-note&#34;).textContent = note || &#34;&#34;;&#xA;    }&#xA;&#xA;    function round2(n) {&#xA;      return Math.round(n * 100) / 100;&#xA;    }&#xA;&#xA;    function calc() {&#xA;      var capacity = getValue(&#34;tank-capacity&#34;);&#xA;      var currentFuel = getValue(&#34;current-fuel&#34;);&#xA;      var currentEthanolPct = getValue(&#34;current-ethanol&#34;);&#xA;      var targetEthanolPct = getValue(&#34;target-ethanol&#34;);&#xA;      var targetVolume = getValue(&#34;target-volume&#34;);&#xA;&#xA;      if (&#xA;        !Number.isFinite(capacity) ||&#xA;        !Number.isFinite(currentFuel) ||&#xA;        !Number.isFinite(currentEthanolPct) ||&#xA;        !Number.isFinite(targetEthanolPct) ||&#xA;        !Number.isFinite(targetVolume)&#xA;      ) {&#xA;        setResult(&#34;输入无效&#34;, &#34;请检查所有输入项。&#34;);&#xA;        return;&#xA;      }&#xA;&#xA;      if (capacity &lt;= 0 || currentFuel &lt; 0 || targetVolume &lt;= 0) {&#xA;        setResult(&#34;输入无效&#34;, &#34;油量和容量必须是有效的正数。&#34;);&#xA;        return;&#xA;      }&#xA;&#xA;      if (currentFuel &gt; capacity) {&#xA;        setResult(&#34;输入无效&#34;, &#34;当前油量不能大于油箱容量。&#34;);&#xA;        return;&#xA;      }&#xA;&#xA;      if (targetVolume &gt; capacity) {&#xA;        setResult(&#34;输入无效&#34;, &#34;加油后总油量不能大于油箱容量。&#34;);&#xA;        return;&#xA;      }&#xA;&#xA;      if (targetVolume &lt; currentFuel) {&#xA;        setResult(&#34;输入无效&#34;, &#34;加油后总油量不能小于当前油量。&#34;);&#xA;        return;&#xA;      }&#xA;&#xA;      if (&#xA;        currentEthanolPct &lt; 0 ||&#xA;        currentEthanolPct &gt; 100 ||&#xA;        targetEthanolPct &lt; 0 ||&#xA;        targetEthanolPct &gt; 100&#xA;      ) {&#xA;        setResult(&#34;输入无效&#34;, &#34;乙醇比例请填写 0 到 100 之间的数值。&#34;);&#xA;        return;&#xA;      }&#xA;&#xA;      var ec = currentEthanolPct / 100;&#xA;      var et = targetEthanolPct / 100;&#xA;      var addTotal = targetVolume - currentFuel;&#xA;      var ethanolNeed = targetVolume * et - currentFuel * ec;&#xA;      var gasNeed = addTotal - ethanolNeed;&#xA;&#xA;      var eps = 1e-9;&#xA;      if (addTotal &lt; eps) {&#xA;        setResult(&#xA;          &#34;无需加油&#34;,&#xA;          &#34;当前油量已经等于目标总油量。&#34;,&#xA;          &#34;若仍需调整乙醇比例，只能先消耗或放出部分燃油后再重新计算。&#34;&#xA;        );&#xA;        return;&#xA;      }&#xA;&#xA;      if (ethanolNeed &lt; -eps || gasNeed &lt; -eps) {&#xA;        setResult(&#xA;          &#34;当前条件下无法直接达成&#34;,&#xA;          &#34;在不放油且仅补充 E0 汽油 + 无水乙醇的条件下，该目标不可达。&#34;,&#xA;          &#34;可尝试：降低目标乙醇比例、提高目标总油量（接近加满）、或先消耗当前燃油后再计算。&#34;&#xA;        );&#xA;        return;&#xA;      }&#xA;&#xA;      ethanolNeed = Math.max(0, ethanolNeed);&#xA;      gasNeed = Math.max(0, gasNeed);&#xA;&#xA;      setResult(&#xA;        &#34;应添加乙醇 &#34; +&#xA;          round2(ethanolNeed).toFixed(2) +&#xA;          &#34; L，汽油 &#34; +&#xA;          round2(gasNeed).toFixed(2) +&#xA;          &#34; L&#34;,&#xA;        &#34;本次总补油量: &#34; + round2(addTotal).toFixed(2) + &#34; L&#34;,&#xA;        &#34;计算假设补充乙醇为 E100，补充汽油为 E0。&#34;&#xA;      );&#xA;    }&#xA;&#xA;    document.getElementById(&#34;ethanol-calc-btn&#34;).addEventListener(&#34;click&#34;, calc);&#xA;    calc();&#xA;  })();&#xA;&lt;/script&gt;</description>
    </item>
  </channel>
</rss>
