Java中将表示分钟的double类型转换为秒数int类型的实现方案
Java 分秒格式double转总秒数实现方案
核心注意点
你传入的33.51属于「整数位为分钟数、小数位为秒数」的分秒拼接格式,不是十进制分钟表示,因此不能直接整体乘以60计算,必须拆分两部分分别统计
修改步骤
- 调整
Runner类的time字段类型为double,适配double类型的时长输入 - 重写
getTime()转换逻辑,拆分分钟部分和秒部分计算总秒数,同时增加浮点精度处理避免误差 - 可重载构造方法,同时兼容原有int类型时长的输入场景
完整修改后代码
public class Runner { String membershipID; String name; double time; // 兼容原有int类型时长的构造方法 public Runner(String mem, String na, int ti) { this.membershipID = mem; this.name = na; this.time = ti; } // 新增支持double类型时长的构造方法 public Runner(String mem, String na, double ti) { this.membershipID = mem; this.name = na; this.time = ti; } public String getMembershipID() { return membershipID; } public String getName() { return name; } public int getTime() { // 拆分整数部分:分钟数 int minutes = (int) time; // 拆分小数部分:秒数,乘以100后四舍五入避免浮点精度误差 int seconds = (int) Math.round((time - minutes) * 100); // 计算总秒数返回 return minutes * 60 + seconds; } public static void main(String[] args) { // 原有int类型输入不受影响 Runner a = new Runner("RF23", "George Formsby", 33); Runner b = new Runner("RG89", "Neil Innes", 32); Runner c = new Runner("ST200", "Sandy Denny", 30); // 新增double类型输入测试,33.51对应33分51秒 Runner d = new Runner("TT001", "Test User", 33.51); System.out.println("MembershipID is: " + a.getMembershipID()); System.out.println("Name is: " + a.getName()); System.out.println("Time in seconds: " + a.getTime()); System.out.println("MembershipID is: " + b.getMembershipID()); System.out.println("Name is: " + b.getName()); System.out.println("Time is: " + b.getTime()); System.out.println("MembershipID is: " + c.getMembershipID()); System.out.println("Name is: " + c.getName()); System.out.println("Time is: " + c.getTime()); // 测试double输入的转换结果,输出应为2031 System.out.println("MembershipID is: " + d.getMembershipID()); System.out.println("Name is: " + d.getName()); System.out.println("Time is: " + d.getTime()); } }
效果验证
输入33.51时,拆分得到分钟数33、秒数51,总秒数计算为33*60+51=2031,符合预期。
内容的提问来源于stack exchange,提问作者CrimsonRainer
相关产品推荐
相关产品推荐

