gpt4 book ai didi

java - 将持续时间(BigDecimal 值 + 时间单位)转换为毫秒长

转载 作者:行者123 更新时间:2023-12-01 17:53:14 24 4
gpt4 key购买 nike

我必须创建一个具有 2 个输入参数的函数: Time duration BigDecimal(精度 38,小数位数 6)和 TimeUnitsType enum (天、小时、分钟或秒)。

我需要获取long结果值(毫秒);据我了解,longValue()方法来自BigDecimal在这里不会精确工作,因为它将比例设置为 0,并且 longValueExact()会抛出ArithmeticException("Overflow") (因为精度 - 小数位数 > 19)

public static long convertTimeToMillis(BigDecimal time, TimeUnitsType timeUnitsType) {
long timeLong = time.longValue();
switch (timeUnitsType) {
case DAYS:
return TimeUnit.DAYS.toMillis(timeLong);
case HOURS:
return TimeUnit.HOURS.toMillis(timeLong);
case MINUTES:
return TimeUnit.MINUTES.toMillis(timeLong);
default:
return TimeUnit.SECONDS.toMillis(timeLong);
}
}

所以我需要针对每种情况分别进行单独计算。你能帮我么? BigDecimal 运算让我有点害怕,因为我以前没有使用过它们:)并且任务的其余部分需要精度。

附注Java版本是1.6

最佳答案

如果时间的单位是timeUnitsType,并且您将该时间(以其单位)转换为毫秒,那么总是有可能发生溢出。 long 根本无法容纳超过 19 位数字,而在这里,您可以在秒中包含 32 位小数点后 6 位,并将其转换为毫秒,最多可容纳 35 位数字。 32 位天数到毫秒更糟糕...

您确定需要将 TimeUnit 中的 BigDecimal 转换为以毫秒为单位的单个 long 吗?

如果丢失任何信息,

BigDecimal.longValueExact() 将引发异常。因此,如果您检查该异常并处理它,那么我想事情就会好起来。

关于java - 将持续时间(BigDecimal 值 + 时间单位)转换为毫秒长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com