☰
openGym公斤与磅双向切换:kg↔lb单位转换指南
2026/10/7 8:35:55 网站建设 项目流程

openGym公斤与磅双向切换:kg↔lb单位转换指南

【免费下载链接】openGymSelf-hosted gym & body-weight tracker — plan routines, log workouts (supersets, warm-ups, cardio), see which muscles are trained, fatigued or detrained, import from FitNotes/Strong/Hevy, passkey login. Your data, your server.项目地址: https://gitcode.com/GitHub_Trending/op/openGym

openGym 是一款自托管(self-hosted)的健身训练记录工具:你可在自己的服务器上规划训练计划、记录每一次组数与重量(支持超级组、热身、有氧)、查看肌肉训练/疲劳状态,并从 FitNotes、Strong、Hevy 导入数据,支持 Passkey 登录。本文讲解 openGym 的 kg↔lb 单位双向切换功能——如何一键换算全部历史数据、两种切换策略的区别,以及多设备同步时单位如何保持一致。

为什么单位切换值得专门讲一次? 🏋️

很多健身 App 切换单位只是"改个标签":你存的是 60 kg,切成 lb 后屏幕仍显示"60 lb",数据全乱了。openGym 修复了这个问题——切换时会逐条遍历你存储的每一个重量,真正完成数值换算(实现见 frontend/src/lib/units.js)。

三步完成 kg ↔ lb 切换

  1. 打开Settings(设置)→ General(常规),找到Weight unit(重量单位)一行;
  2. 在 kg / lb 分段选择器中点选目标单位;
  3. 弹出确认框,从两个选项中选择:
    • Convert the numbers(换算数值):把所有存过的重量换算成新单位;
    • Keep the numbers, change the label(只改标签):保留原始数字,仅变更显示单位(适合一开始就用 lb 记录、只是标签设错的情况)。

关闭弹窗则保持原单位不变。交互代码位于 frontend/src/views/Settings.jsx,确认逻辑见 switchUnit。

选"换算数值"时,哪些数据会被转换?

convertStateUnit会一次走遍整个状态(units.js#L78-L106):

  • 训练记录与历史:每一组的重量w、递减组drops、计划重量target与planned;
  • 进行中的训练:当天正在练的组数与当日体重;
  • 计划(Routines):每个动作的目标重量与递增步长(如 2.5 kg 递增 → 5 lb);
  • 体重记录:所有 weigh-in 数据与目标体重;
  • 杠铃重量:自定义杠铃重按"实物"理解——45 lb 杠铃就是 20 kg 杠铃,不是44.1 lb 的换算结果(参见 bar.js#L19-L31);
  • 缓存的总容量vol:由换算后的组数重新累加,历史统计不会出现"lb 标签配 kg 总和"的错位。

舍入规则很贴心(convertWeight):

方向舍入到原因
kg → lb0.5 lb符合美式杠铃片档位
lb → kg0.25 kg符合欧式微片档位
体重0.1体重不上杠,按体重秤精度保留

可以放心来回切换:换算是无损的

由于舍入精度对齐杠铃片档位,任何"能装片"的重量经过 kg → lb → kg 往返都能回到原值(20 kg、42.5 kg、142.5 kg 等)。项目自带了往返测试验证这一点,见 units.test.js#L18-L22。

也就是说:出国旅行临时用 lb 记录、回来切回 kg,历史数据不会漂移。

多设备同步:单位切换如何不打架? 🔄

切换后系统会给数据盖一个unitSet时间戳并立即推送服务器(useStore.js#L987-L994)。效果是:

  • 还在旧单位上记录的另一台设备,下次推送时就会遇到新单位的数据;
  • 若它先推送了一份旧单位副本,副本会先被换算再合并,不会出现两台设备一半 kg 一半 lb 的混搭。

两个相关设置顺手一起看

  • Speed unit(速度单位):km/h ↔ mph。与重量不同,它不做任何数值换算——有氧速度始终按 km/h 存储,只改变显示与输入;在你未手动选择前,默认跟随重量单位(磅用户直接看到 mph)。见 Settings.jsx#L367-L371。
  • Weight decimals(重量小数位):只影响显示精度(0.5 / 0.25),不改变存储与换算结果。
  • 杠铃片清单不换算:片是实物,45 lb 的片不会变成 20.4 kg。片清单按单位分别保存(plates.js#L18-L21),切换后自动读取新单位的清单,切回去又是你原来那份。

快速上手清单 ✅

  1. 长期在 kg / lb 之间迁移 → 选Convert the numbers;
  2. 数字本来就是目标单位、只是标签错了 → 选Keep the numbers;
  3. 切换后到History抽查几组记录与总容量,确认数值符合预期;
  4. 多台设备的用户无需额外操作,同步会自动对齐单位。

相关源码入口:单位换算核心 frontend/src/lib/units.js、设置页 frontend/src/views/Settings.jsx、单测 frontend/src/lib/units.test.js。

【免费下载链接】openGymSelf-hosted gym & body-weight tracker — plan routines, log workouts (supersets, warm-ups, cardio), see which muscles are trained, fatigued or detrained, import from FitNotes/Strong/Hevy, passkey login. Your data, your server.项目地址: https://gitcode.com/GitHub_Trending/op/openGym

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询