math.toradians() 是 java 中将角度(度)转弧度的必需方法,因 math.sin() 等三角函数仅接受弧度;地理坐标如经纬度须先转换才能用于 haversine 等球面计算,否则结果错误。

Math.toRadians() 是 Java 中将角度值(单位:度)转换为弧度值的标准方法,适用于地理坐标(如经纬度)参与球面三角计算(例如 Haversine 公式、大圆距离、方位角等)前的预处理。
为什么必须转成弧度?
Java 的 Math.sin()、Math.cos()、Math.atan2() 等三角函数默认接收弧度值。若直接传入以“度”为单位的经纬度(如纬度 39.9042°、经度 116.4074°),结果会严重错误——因为这些函数把 39.9042 当作 39.9042 弧度(≈ 2286°)来算,完全偏离地理意义。
怎么用 Math.toRadians() 转换经纬度
对每个角度变量单独调用即可,无需额外判断正负或范围:
- 纬度(latitude): double latRad = Math.toRadians(latDeg);
- 经度(longitude): double lonRad = Math.toRadians(lonDeg);
- 若处理多个点(如起点和终点),分别转换各自的 lat/lon:
- double lat1Rad = Math.toRadians(lat1Deg);
- double lon1Rad = Math.toRadians(lon1Deg);
- double lat2Rad = Math.toRadians(lat2Deg);
- double lon2Rad = Math.toRadians(lon2Deg);
常见误区提醒
- 不要对已为弧度的值重复转换(比如误把 Math.toRadians(Math.PI) 当作合法操作);
- 地理坐标本身是角度,但 Math.toRadians() 不校验输入是否在 -180~180 或 -90~90 范围内——它只做纯数学换算。确保原始度数格式合理(如经度 -180~+180,纬度 -90~+90);
- 如果数据来自 GPS 设备或 API,通常已是十进制度(decimal degrees),可直接传入 toRadians();若为度分秒(DMS),需先转为十进制度再转换;
- 注意变量命名清晰,例如用 latRad 和 latDeg 区分,避免后续混淆。
一个实际小例子(Haversine 距离计算片段)
假设北京(39.9042°N, 116.4074°E)与东京(35.6762°N, 139.6503°E)的球面距离:
double lat1 = 39.9042, lon1 = 116.4074; double lat2 = 35.6762, lon2 = 139.6503; <p>double lat1Rad = Math.toRadians(lat1); double lon1Rad = Math.toRadians(lon1); double lat2Rad = Math.toRadians(lat2); double lon2Rad = Math.toRadians(lon2);</p><p>// 后续代入 Haversine 公式... double dLat = lat2Rad - lat1Rad; double dLon = lon2Rad - lon1Rad; // ... </p>
不复杂但容易忽略——只要记住:地理坐标进三角函数前,必过 Math.toRadians() 这一道关。










