You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现0-99与0-100数值范围双向互转的最佳方法

JavaScript 0-99与0-100数值范围双向转换方案

核心转换逻辑

针对Homebridge MQTT-Thing(0-100范围)和zwavejs2mqtt设备(0-99范围)的适配需求,双向转换逻辑如下:

  • 下行方向(MQTT-Thing → 设备):将0-100的数值线性映射到0-99区间,保证输入100时输出99,输入0时输出0
  • 上行方向(设备 → MQTT-Thing):将0-99的数值线性映射到0-100区间,保证输入99时输出100,输入0时输出0

可直接复用的代码实现

下行编码函数(发往zwave设备)

用于MQTT-Thing发送控制指令前的数值转换:

// 输入:0-100范围的数值,输出:0-99范围的合法设备数值
function convert100To99(input) {
  // 先处理非法输入,裁剪到合法范围
  const validInput = Math.max(0, Math.min(100, Number(input) ?? 0));
  return Math.round(validInput * 99 / 100);
}

上行解码函数(接收zwave设备上报)

用于MQTT-Thing接收设备状态后的数值转换:

// 输入:0-99范围的设备上报数值,输出:0-100范围的Homebridge可识别数值
function convert99To100(input) {
  const validInput = Math.max(0, Math.min(99, Number(input) ?? 0));
  return Math.round(validInput * 100 / 99);
}

方案优势

  • 边界值完全匹配:0和两个范围的最大值转换结果100%符合两端平台的要求,不会出现最大值无法达到、或者输出非法值的问题
  • 误差极小:线性映射加四舍五入的方式,转换误差最大不超过1个单位,对于亮度、音量这类百分比控制场景,用户完全感知不到差异
  • 容错性强:内置输入校验逻辑,即便遇到非数值、超出范围的异常消息,也会自动修正到合法范围,不会引发设备或插件报错

内容的提问来源于stack exchange,提问作者SofaKng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:27:05