package com.ruoyi.common.utils; import java.math.BigDecimal; import java.math.RoundingMode; /** * @Description 桩号计算工具 * * @author liuwenge * @date 2024/1/17 14:43 */ public class StakeMarkUtils { /** * @Description 桩号转公里数 * * @author liuwenge * @date 2024/3/6 11:06 * @param stakeMark 桩号:"K123+123" * @return 公里数:123.123 */ public BigDecimal format(String stakeMark){ if (StringUtils.isEmpty(stakeMark)){ return BigDecimal.ZERO; } String kilometre = stakeMark.toLowerCase().replace("k","").replace("+","."); return new BigDecimal(kilometre); } /** * @Description 计算桩号距离(公里) * * @author liuwenge * @date 2024/1/17 14:45 * @param startStakeMark 开始桩号 * @param endStakeMark 结束桩号 * @return java.math.BigDecimal 距离 */ public static BigDecimal getKilometre(String startStakeMark, String endStakeMark){ if (StringUtils.isEmpty(startStakeMark) || StringUtils.isEmpty(endStakeMark)){ return BigDecimal.ZERO; } String start = startStakeMark.toLowerCase().replace("k","").replace("+","."); String end = endStakeMark.toLowerCase().replace("k","").replace("+","."); BigDecimal startKilometre = new BigDecimal(start); BigDecimal endKilometre = new BigDecimal(end); if (startKilometre.compareTo(endKilometre) > 0){ return startKilometre.subtract(endKilometre).setScale(3, RoundingMode.HALF_UP); } else { return endKilometre.subtract(startKilometre).setScale(3, RoundingMode.HALF_UP); } } /** * @Description 计算桩号距离(米) * * @author liuwenge * @date 2024/1/17 15:04 * @param startStakeMark 开始桩号 * @param endStakeMark 结束桩号 * @return java.math.BigDecimal 距离 */ public static BigDecimal getMetre(String startStakeMark, String endStakeMark){ if (StringUtils.isEmpty(startStakeMark) || StringUtils.isEmpty(endStakeMark)){ return BigDecimal.ZERO; } String start = startStakeMark.toLowerCase().replace("k","").replace("+","."); String end = endStakeMark.toLowerCase().replace("k","").replace("+","."); BigDecimal startKilometre = new BigDecimal(start); BigDecimal endKilometre = new BigDecimal(end); if (startKilometre.compareTo(endKilometre) > 0){ return startKilometre.subtract(endKilometre).multiply(new BigDecimal("1000")).setScale(0, RoundingMode.HALF_UP); } else { return endKilometre.subtract(startKilometre).multiply(new BigDecimal("1000")).setScale(0, RoundingMode.HALF_UP); } } }