You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy使用Math.ceil生成随机日期出现.0后缀格式问题如何解决

问题原因

你遇到的带小数点后缀问题,核心是Math.ceil()、Math.floor()方法返回的是Double类型,直接拼接字符串时就会自动带上.0后缀,和补零逻辑结合后就出现了02.0这类异常格式。

修正方案

方案1:原有代码最小改动

只需要在生成随机数值后强制转为整数类型即可,修改后代码如下:

def dob;

//设置年份范围
def min = 1900;
def max = 2004;

// 转成Integer去掉小数位
def month = Math.ceil(Math.random() * 12) as Integer;
def day = Math.ceil(Math.random() * 28) as Integer;
def year = Math.floor(Math.random() * (max - min) + min) as Integer;

//补零逻辑保持不变
if(month < 10) {
    month = "0" + month;
}
if(day < 10) {
    day = "0" + day;
}

//拼接日期
dob = month + "/" + day + "/" + year;

return dob;

方案2:Groovy原生日期API实现(更严谨)

原有代码固定取28天会浪费大量合法日期,用Groovy自带的日期处理逻辑可以自动适配大小月、闰月的天数规则,实现更合理的随机日期生成:

import java.time.LocalDate
import java.time.format.DateTimeFormatter

def minYear = 1900
def maxYear = 2004
// 随机生成合法的年、月、日
def randomYear = new Random().nextInt(maxYear - minYear + 1) + minYear
def randomMonth = new Random().nextInt(12) + 1
def maxDay = LocalDate.of(randomYear, randomMonth, 1).lengthOfMonth()
def randomDay = new Random().nextInt(maxDay) + 1
// 直接格式化输出mm/dd/yyyy格式
def formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy")
return LocalDate.of(randomYear, randomMonth, randomDay).format(formatter)

内容的提问来源于stack exchange,提问作者Raghav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:54:03