杂记 › 生活随笔 › 两式都显示、只有一式进 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