大量の数値をメガバイトに変換しようとしています。小数はいらない
numeric function formatMB(required numeric num) output="false" {
return arguments.num \ 1024 \ 1024;
}
その後、エラーがスローされます
どうすればこれを回避できますか?
大量の数値をメガバイトに変換しようとしています。小数はいらない
numeric function formatMB(required numeric num) output="false" {
return arguments.num \ 1024 \ 1024;
}
その後、エラーがスローされます
どうすればこれを回避できますか?
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 ビットの符号付き Integersを使用しますが、Long (容量がはるかに大きい) は使用しません。 エラーメッセージが示すように、ここでのサイズ制限はIntegerの容量です:
2147483647
9223372036854775807
CF は比較的型がありませんが、一部の数学関数と日付関数にも同じ制限があることに注意してください。たとえば、DateAddは技術的にはミリ秒をサポートしていますが、非常に大きな数値を使用しようとすると、次のようになります。
// getTime() - returns number of milliseconds since January 1, 1970
currentDate = dateAdd("l", now().getTime(), createDate(1970,1,1));
...「number」パラメーターは整数でなければならないため、まったく同じエラーで失敗します。そのため、ドキュメントに「整数」が期待されると記載されている場合は注意してください。「数字」や「数値」だけを意味するものではありません...