我在以下代码中收到以下错误:
下限超过上限
如果交换它们,则会得到不同的错误:
重复案例标签
我能做什么?
我尝试了所有不带Int64()
和带Int64()
的方法,但都没有用。
你自己试试吧,不管你输入CAST与否,错误都是存在的。
下面有几种方法可以做到这一点,但我想知道为什么这段代码会出错:
Delphi无法实现对CASE语句的64位处理,无法使用下面的代码。
function cntCaseTbl(Z: Int64): Int64;
begin
case Abs(Z) of
0..9: Exit(1);
10..99: Exit(2);
100..999: Exit(3);
1000..9999: Exit(4);
10000..99999: Exit(5);
100000..999999: Exit(6);
1000000..9999999: Exit(7);
10000000..99999999: Exit(8);
100000000..999999999: Exit(9);
1000000000..9999999999: Exit(10);
10000000000..99999999999: Exit(11);
100000000000..999999999999: Exit(12);
1000000000000..9999999999999: Exit(13);
10000000000000..99999999999999: Exit(14);
100000000000000..999999999999999: Exit(15);
1000000000000000..9999999999999999: Exit(16);
10000000000000000..99999999999999999: Exit(17);
100000000000000000..999999999999999999: Exit(18);
1000000000000000000..9223372036854775807: Exit(19);
end;
end;
1条答案
按热度按时间lrpiutwd1#
在第131行,
10000000000
和99999999999
是类型转换为Int64
的Integer
,它们都在Integer
的范围之外,因此它们在转换之前溢出,从而导致第一个值小于第二个值,因此出现错误。其他线路也是如此。
这在Delphi的文档中进行了描述:
案例语句
CASE语句可以为深度嵌套的IF条件语句提供一种可读的替代方法。CASE语句的格式为:
其中选择器表达式是序数类型小于32位的任何表达式(字符串类型和大于32位的序数无效)...
我建议完全去掉
case
,只使用循环,例如: