张世豪
15 小时以前 b272034a1fdbfe32b355fc6c264a4c45df107190
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package dikuai;
 
import java.util.Locale;
 
/**
 * 割草宽度计算工具类
 * 用于根据割刀宽度计算实际割草宽度
 */
public class Gecaokuanjisuan {
    
    /**
     * 根据割刀宽度计算割草宽度
     * 
     * 计算方法:割草宽度 = 割刀宽度 × 0.85(85%覆盖率)
     * 这是考虑到实际作业时,相邻割草路径之间会有一定的重叠,以确保全覆盖
     * 
     * @param bladeWidthMeters 割刀宽度,单位:米
     * @return 割草宽度,单位:厘米,保留两位小数。如果输入值无效(小于等于0),返回0.0
     * 
     * 使用示例:
     * double bladeWidth = 0.50; // 割刀宽度0.5米
     * double mowingWidth = Gecaokuanjisuan.calculateMowingWidth(bladeWidth);
     * // 结果:mowingWidth = 42.50(厘米)
     */
    public static double calculateMowingWidth(double bladeWidthMeters) {
        if (bladeWidthMeters <= 0) {
            return 0.0;
        }
        
        // 计算割草宽度:割草宽度 = 割刀宽度 * 0.85(85%覆盖率)
        double mowingWidthMeters = bladeWidthMeters * 0.85;
        double mowingWidthCm = mowingWidthMeters * 100.0;
        
        // 保留两位小数(四舍五入)
        return Math.round(mowingWidthCm * 100.0) / 100.0;
    }
    
    /**
     * 根据割刀宽度计算割草宽度(返回格式化字符串)
     * 
     * @param bladeWidthMeters 割刀宽度,单位:米
     * @return 割草宽度字符串,单位:厘米,保留两位小数。如果输入值无效,返回空字符串
     * 
     * 使用示例:
     * double bladeWidth = 0.50; // 割刀宽度0.5米
     * String mowingWidthStr = Gecaokuanjisuan.calculateMowingWidthString(bladeWidth);
     * // 结果:mowingWidthStr = "42.50"
     */
    public static String calculateMowingWidthString(double bladeWidthMeters) {
        double mowingWidthCm = calculateMowingWidth(bladeWidthMeters);
        if (mowingWidthCm <= 0) {
            return "";
        }
        return String.format(Locale.US, "%.2f", mowingWidthCm);
    }
    
    /**
     * 根据割刀宽度字符串计算割草宽度(返回格式化字符串)
     * 
     * @param bladeWidthStr 割刀宽度字符串,单位:米
     * @return 割草宽度字符串,单位:厘米,保留两位小数。如果输入值无效或无法解析,返回空字符串
     * 
     * 使用示例:
     * String bladeWidthStr = "0.50"; // 割刀宽度0.5米
     * String mowingWidthStr = Gecaokuanjisuan.calculateMowingWidthFromString(bladeWidthStr);
     * // 结果:mowingWidthStr = "42.50"
     */
    public static String calculateMowingWidthFromString(String bladeWidthStr) {
        if (bladeWidthStr == null || bladeWidthStr.trim().isEmpty()) {
            return "";
        }
        
        try {
            double bladeWidthMeters = Double.parseDouble(bladeWidthStr.trim());
            return calculateMowingWidthString(bladeWidthMeters);
        } catch (NumberFormatException e) {
            return "";
        }
    }
}