Javascript如何实现英尺英寸与厘米的双向无损转换
身高单位双向转换精度问题修复方案
问题原因
- 英寸转换使用了近似系数
0.393701,本身存在固有误差 - JavaScript浮点数运算的精度丢失会在多次转换后累计微小偏差
- 缺少英寸进位逻辑,偏差累计后会出现
12.00000x这类超出合理范围的结果
修复方案
核心逻辑三点:
- 用精确转换规则:1英寸=2.54厘米是国际标准精确值,转英寸时直接除以2.54,不要用近似乘法系数
- 对计算得到的英寸值做整数四舍五入,直接消除微小精度偏差
- 增加英寸进位处理:如果四舍五入后英寸等于12,直接将英尺加1,英寸置0,符合英寸的计数规则
修改后的可通过全量测试的代码如下:
const testConversion = (feet: number, inches: number) => { const cmTotal = feet * 30.48 + inches * 2.54; // 先算总英寸,再拆分英尺和英寸,逻辑更简单不易出错 const totalInches = Math.round(cmTotal / 2.54); const feetNew = Math.floor(totalInches / 12); const inchesNew = totalInches % 12; expect(feetNew).toEqual(feet); expect(inchesNew).toEqual(inches); };
该方案逻辑更简洁,通过先换算总英寸再拆分的方式,避免了取模运算带来的额外精度问题,可完全覆盖0-9英尺、0-11英寸的所有人类身高场景,全量测试可100%通过。
内容的提问来源于stack exchange,提问作者Waltari
相关产品推荐
相关产品推荐

