您无法更改CF用于整数的Long大小。因此,您需要改用BigInteger:
numeric function formatMB(required numeric num) {
var numberAsBigInteger = createObject("java", "java.math.BigInteger").init(javacast("string", num));
var mbAsBytes = 1024 ^ 2;
var mbAsBytesAsBigInteger = createObject("java", "java.math.BigInteger").init(javacast("string", mbAsBytes));
var numberInMb = numberAsBigInteger.divide(mbAsBytesAsBigInteger);
return numberInMb.longValue();
}
CLI.writeLn(formatMB(2147483648));
return floor(arguments.num / (1024 * 1024));
使用CF作为整数时,它使用的是Long的大小。
对于那些可能不会阅读评论的人来说,有一个小修正。CF主要使用32位有符号整数,而不是Long(其容量更大)。因此,正如错误消息所示,这里的大小限制是Integer的容量:
2147483647
9223372036854775807
// getTime() - returns number of milliseconds since January 1, 1970
currentDate = dateAdd("l", now().getTime(), createDate(1970,1,1));
如果“number”参数必须是整数,那么它将因为相同的错误而失败。因此请注意,如果文档中提到期望一个“整数”,那么它并不仅仅意味着一个“数字”或“数值”...