雜記 › 生活隨筆 › 兩式都顯示、只有一式進 TDEE:221 行基礎代謝頁的 parseInt 截斷、兩把取整尺與三檔硬編碼實測

兩式都顯示、只有一式進 TDEE:221 行基礎代謝頁的 parseInt 截斷、兩把取整尺與三檔硬編碼實測

同一頁並排印出 1,618 與 1617.5,而 221 行模板裡只有一處乘法進 TDEE:parseInt 的靜默截斷、三把取整尺的落格分佈、守衛漏掉活動那一格、30/40/30 反推 9 樣本無一相等,逐筆實測。

兩個數都顯示,只有一個進了後面的賬

這一頁載入即算:預設 male/30/175/70/1.55 下大數字格印「1,649 kcal」,統計四行是 1,649、1,696、×1.55、2,556,公式卡末行寫著:「1648.8 × 1.55 = 2555.6 kcal」——被乘數是 Mifflin 那個數,1695.7 只在旁邊站著。

全頁唯一一處乘法是 L135 的 tdee = bmrMifflin * activity,三檔與九枚克數都由它派生,Harris 算完就停在顯示層。模板 221 行 / 10105 位元組,摘進純 Node 探針跑了 8 組五元組:Harris 每次都更高,BMR 層差 31.154~111.047,乘上 activity 放大成 37.3848~191.556075,這一層介面一格都不印。

male/30/170/70/1.2 的四根柱 1617.5 1671.672 1941 2006.0064 M 式 H 式 頁算 TDEE 若按 H 式 屏上只有前三根 1,618 / 1,672 / 1,941;第四根差 65.00640000000003。

圖 1:虛線那根介面裡沒有對應的格子。

三把尺:1617.5 在這裡是「1,618」,在那裡是「1617.5」

  • 16 格走 fmt(Math.round 再千分位):大數字 1、統計 3、三檔熱量 3、克數 9。
  • 3 格走 fmt1(toFixed(1)、無千分位):全在公式卡。
  • 2 處是裸拼:活動因子行與公式卡等式裡的因子。

同一個數因此在同一屏上長兩個樣子:male/30/170/70 的 1617.5,統計行印「1,618」、公式卡印「1617.5」;male/30/250/300 的 4417.5 印成「4,418」與「4417.5」。那 0.5 是尺的差,不是算了兩遍。

取整例:Math.round(0.5)=1;Math.round(-0.5)=-0,而 fmt 輸出 "-0"(裸拼同值卻是 "0");Math.round(-1617.5)=-1617,.5 朝 +∞;fmt1(1648.75)="1648.8" 對 fmt1(1.005)="1.0"。

三把尺的落格數:16 / 3 / 2 fmt 16 格 fmt1 3 格 裸拼 2 處 同一個 1617.5:走 fmt 印 1,618,走 fmt1 印 1617.5。

圖 2:三把尺各管哪些格子。

parseInt 只裝在年齡那一格

L108–L111 裡只有年齡是 parseInt,其餘三格 parseFloat。「25.9」「25abc」統統讀成 25、零提示,大數字格回顯 1,477:female/170/70/1.2 下截斷後的 Mifflin=1476.5,未截斷算術是 1472,差 4.5,乘 1.2 進 TDEE 後 1771.8 對 1766.3999999999999,差 5.4。同一串 "1e2" 在年齡框讀成 1(mifflin 格 1,597),在體重框被 parseFloat 讀成 100(1,752)。只有 "abc"、"-3"、"0"、空串觸發「請輸入有效參數」,return 前不清屏,螢幕殘留上一輪的「1,618」。

守衛不查活動那一格

L113 只判三格的 isNaN 與 ≤0。下拉被改壞成 "x" 或空串時 parseFloat 出 NaN:male/30/170/70 下 Mifflin 行 1,618、Harris 行 1,672 照常印,因子行裸拼「×NaN」,TDEE 行加三檔與九枚克數共 12 格全變「—」,公式卡寫「1617.5 × NaN = — kcal」,toast 一條都不彈。weight 填 "Infinity" 是第二條靜默路:判據全放行,大數字格直接「— kcal」。

-500、+300 與 30/40/30:常數一路寫到底

三檔由 L138–L140 生成,任意輸入下相鄰兩檔恆差 500 與 300、首尾 800。宏量是 L144–L150 的 0.30、0.40、0.30,權重和恰為 1,捨入前的反推恆等目標(預設中檔原始 2555.5625 原樣還原)。

可介面克數走的是 fmt,預設的「差值來自 fmt1」不成立。按 4/4/9 用介面克數反推,9 樣本無一等於目標:預設組低檔 2055.5625 顯示 154/206/69,反推 2061,差 +5.4375;female/40/160/55/1.55 的中檔 1842.95 顯示 138/184/61,反推 1837,差 -5.9500000000000455。九個差全落在 -5.95~+5.4375,理論界 0.5×4+0.5×4+0.5×9=8.5。

性別只認三個字母,兩式之差還會變號

L120 與 L178 同一判據 gender === 'male':'MALE'、空串、null 全落 -161 那支——male/30/170/70/1.2 下 "MALE" 的 mifflin 格 1,452,與 "female" 同值,只有全小寫得 1,618。兩支常數差 5-(-161)=166;Harris 側不是常數,30/170/70 處 1671.672 對 1491.643,差 180.029。

大小關係還隨體重翻轉,8 組只是恰好同側:male/170/30 下 w=50 時 H-M=-13.768000000000029、w=55 時 +3.2170000000000982,臨界 54.052987930526946;female/170/30 反向,w=124 時 -0.5190000000002328,臨界 123.31075697211145。

順帶對一眼文案

下拉 5 檔的 value 是 1.2/1.375/1.55/1.725/1.9,option 文案裡的 ×數字與 value 逐行一致;對照 tools.php 的 12 條判定是 [一致] 7、[衝突] 1、[部分一致] 4,衝突那條是 intro 的「單位切換(ft/lb)」,markup 裡沒有對應控件。兩式的來歷站內那篇寫過,這裡不復述;頁面在基礎代謝率計算機。

常見問題

Q:兩個數都印在頁上,為什麼賬只走一個?

只有一處乘法,被乘數寫死成 Mifflin,Harris 的兩個顯示位都在它之前;換被乘數要差的 37.3848~191.556075 沒有格子承載。

Q:相鄰兩格差 0.5,是算了兩遍嗎?

一遍,兩把尺:1617.5 走 fmt 得「1,618」,走 fmt1 得「1617.5」。

Q:三枚克數按 4/4/9 加不回目標那一格?

加不回是常態:9 樣本無一相等,差在 -5.95~+5.4375,三格各過一次 Math.round 後捨入差按 4、4、9 放大,界內 8.5。

📎 相關文章

.ß 改大寫後整行多出一格:後綴大小寫頁對 18 行樣本的三檔逐條實測 2026-11-09 四個開關預設開著哪三個:文本集合運算的摺疊口徑、代表元與去重短路實測 2026-11-08 奶奶要連點三下才出來:親戚關係計算器 36 條規則與 11110 條鏈的兜底實測 2026-11-07 口算題卡每張 A4 能排多少題:字號、頁邊距與資訊欄怎麼改分頁 2026-11-03 同一串 23 位元組的內容切換 4 個糾錯等級:這一頁自己寫的二維碼編碼器走到了哪一步 2026-10-30