如果直接使用return返回最终计算值,如下方代码中的情况, 要将最终要返回的数字类型放到计算表达式的最开始,防止在计算过程中数字计算出现溢出,导致最终计算结果错误。(当然,大数字计算,可以用BigInteger, 金额用Decimal等)
/**
* 根据单位,返回毫秒数
*
* @author Danger
* @date 2019/12/2
* @param unit
* @param value
* @return java.lang.Long
*/
private Long getValue(String unit, Long value) {
switch (unit) {
default:
return 0L;
case "s":
return value * 1000;
case "m":
return value * 1000 * 60;
case "h":
return value * 1000 * 60 * 60;
case "d":
return value * 1000 * 60 * 60 * 24;
case "M":
// return 1000 * 60 * 60 * 24 * 30 * value; 这是错误示例!
// 这种写法编译并不会报错,但是计算结果是错误的(value != 0 时),因为1000 * 60 * 60 * 24 * 30已经超出了int的取值范围。
// 因为value是Long类型,所以将value写在前面,可以保证计算结果一直是Long类型。
return value * 1000 * 60 * 60 * 24 * 30;
case "y":
return value * 1000 * 60 * 60 * 24 * 30 * 365;
}
}