当结果> 1时,TimeUnit.toSeconds效果很好。但是,由于我们要处理long,因此如果结果介于0和1之间(不包括),我们将得到0。一个Java SDK函数可以为我们处理双重转换吗?
我知道我可以自己乘以或除以适当的两倍来完成这些转换。但是,它容易出错,并且不能很好地阅读。我更喜欢使用Java SDK中的现有功能,类似于Java的TimeUnit。
展示我的情况的最小示例:
import java.util.*;
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
System.out.println(TimeUnit.MILLISECONDS.toSeconds(1));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
Run Code Online (Sandbox Code Playgroud)
我想要一个处理双精度函数并返回0.001的函数
korolar的建议太好了,应该作为一个答案并采用适当的格式。它为您提供所需的大约一半。如果您要自己进行乘法或除法,则至少可以从库枚举中获取要乘或除的数字。
public static double millisToSeconds(long millis) {
return (double) millis / TimeUnit.SECONDS.toMillis(1);
}
Run Code Online (Sandbox Code Playgroud)
现在millisToSeconds(1)给出0.001。我同意JB Nizet和VGR的评论,您应该将计算结果包装在一个名称不错的方法中,以保持代码的可读性。如果您希望该方法更通用:
public static double convertTimeUnit(double amount, TimeUnit from, TimeUnit to) {
// is from or to the larger unit?
if (from.ordinal() < to.ordinal()) { // from is smaller
return amount / from.convert(1, to);
} else {
return amount * to.convert(1, from);
}
}
Run Code Online (Sandbox Code Playgroud)
现在convertTimeUnit(1, TimeUnit.MILLISECONDS, TimeUnit.SECONDS)像以前一样给出0.001,而convertTimeUnit(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)给出1000.0。
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |