面积换算是一个封闭形式的算术问题:每个单位都是参考单位(SI 下为平方米,美制下为平方英尺)的固定线性比例,因此页面构建了一个转换因子的有向图,并计算任意两个节点之间的路径乘积。图中的边是来自 NIST SP 811(附录 B)和 BIPM SI 手册 §2.3.3 的精确常数;对于英制/美制分支,常数由 1959 年国际码磅协议定义,编入 NIST Handbook 44 用于贸易用途。
在 SI 内部,计算是精确的 10 的幂次。因为面积是二维量,两个线性单位之间的转换因子需要平方:1 m = 100 cm,所以 1 m² = 10,000 cm²;1 km = 1,000 m,所以 1 km² = 1,000,000 m²。公顷(ha)和已废弃的公亩(a)是 CIPM 批准用于土地计量的两个非 SI 公制单位:1 ha = 10,000 m²(一个 100 m x 100 m 的正方形,这是 19 世纪法国典型农田的实际面积,该单位于 1795 年引入),1 a = 100 m²。两者都是 10 的幂次,因此 SI 面积单位之间的任何转换都是精确的乘除运算,无需取整。
英制和美制单位更为复杂。1959 年国际协议将 1 码精确定义为 0.9144 m,因此 1 ft = 0.3048 m(精确),1 ft² = 0.09290304 m²(精确)。英亩定义为 4,840 yd²(一个 furlong x chain:1 fur = 220 yd,1 ch = 22 yd,1 acre = 1 fur x 1 ch = 220 x 22 yd²),精确等于 4,046.8564224 m²。美国测量英亩(用于旧版公共土地测量数据,主要在美国西部)使用略有不同的英尺(1 ft_survey = 1200/3937 m,因为美国原始定义早于 1959 年协议),等于 4046.872609874252 m²——在转换旧版 USGS 地块时需要注意。测量镇区为 36 mi²(一个测量镇区恰好包含 36 个各 1 mi² 的区块)。
东亚传统单位在中国大陆、台湾、日本和韩国仍然使用。中国大陆的亩在 1929 年被重新标准化为精确的 666.666... m²(公顷的十五分之一),1959 年随公制过渡再次确认。台湾的坪为 3.305785 m²(约 36 平方尺,尺的长度为 10/33 m)。韩国的坪(평)与台湾的坪相同。日本的坪(坪)是台湾坪的两倍(在某些文献中约 3.305785 m² x 2,或 1 间² = (1.818 m)² ≈ 3.3058 m²——相同的根常数),用于《日本建筑基准法》下的建筑面积报告。
实现细节:页面中两个单位之间的转换是单次乘以一个预计算常数,然后用 toPrecision(12) 进行数字到字符串的转换,或对纯整数链路使用 BigInt 路径。JavaScript 的 Number(IEEE 754 binary64)有约 15-17 位有效十进制数字,这远远超出了土地面积精度的需求(地球陆地面积约 149,000,000 km²,12 位数字即可表示,任何实际地块都在 9 位数字以内)。对于货币、股票或任何需要精确度的场景,请使用 decimal.js 等十进制库——但对于面积来说,双精度浮点数已经足够。
公制面积换算使用线性因子的平方:1 m² = 10,000 cm² = 1,000,000 mm²。从 cm² 到 m² 需要除以 10⁴(100²),而不是除以 100——每个线性的 10 倍变为面积的 100 倍。公顷是专门为土地计量设计的非 SI 公制单位:1 ha = 100 m x 100 m = 10,000 m²。它是欧盟、澳大利亚和亚洲大部分地区农业用地的标准单位。英亩起源于一对牛一天能犁地的面积;现代标准为 4,840 yd² = 4,046.8564224 m²(精确)。美国测量英亩略大(4046.8726 m²),出现在旧版公共土地测量地块中。1 ft² = 0.09290304 m²(精确,国际英尺,1959 年协议)。旧版美国测量英尺(1200/3937 m)给出的 ft² 略有不同,在阅读 1959 年之前的契约或 USGS 镇区数据时需要注意。中国大陆的亩在 1929 年标准化为 666.666... m²(1/15 ha),1959 年再次确认。顷 = 100 亩 ≈ 6.6667 ha。两者都是公顷的 10 的幂次倍数,因此换算是精确的。台湾的坪(坪)和韩国的坪(평)为 3.305785 m²;日本的坪(坪)和旧文献中的韩国坪约为 3.3058 m²(一间²,间 ≈ 1.818 m)。这些是东亚地区房产列表中使用的单位。换算是一个标有精确比例因子的有向图边;页面选择一条路径,将因子相乘,以 toPrecision(12) 返回结果——不会两次取整,这是大多数换算 bug 的来源。精度:JavaScript 的 Number(IEEE 754 binary64)提供 15-17 位有效十进制数字,对任何实际土地地块都绰绰有余(地球陆地面积为 1.49x10⁸ km²,12 位数字即可表示)。如需无限精度,可通过 BigInt 或十进制库实现。