我是一个用于反转数字的PLSQL语句。
,代码就是这个
declare
num5 int:=54321;
revnum int:=0;
temp int;
num int;
begin
num:=num5;
while(num5>0)
loop
temp:=mod(num5,10);
num5:=num5/10;
revnum:=revnum*10+temp;
end loop;
dbms_output.put_line('Original number is '||num);
dbms_output.put_line('Reverse number is '||revnum);
end;
/
我得到的输出是 :
原始号码是54321
反向数字是123451
对我来说,代码似乎没问题, 为什么我会得到额外的' 1'
为了进一步挖掘,我尝试将一个小于十的数字除以后仍然得到1而不是' 0&#39 ;;
这里发生了什么?
我尝试过的示例代码。
declare
num int:=6;
res int;
begin
res:=num/10;
dbms_output.put_line(res);
end;
/
这里的输出也是1而不是0.为什么会这样?
答案 0 :(得分:2)
您正在使用整数。 6/10四舍五入为1
declare
num1 number;
num2 int;
begin
num1 := 6/10;
num2 := 6/10;
dbms_output.put_line(num1);
dbms_output.put_line(num2);
end;
/
结果
.6
1
你需要一个围绕num5 / 10的截断。否则循环会进入另一个循环。 (5/10)= .5四舍五入为1.
declare
num5 int:=715143212;
revnum int:=0;
begin
dbms_output.put_line('Original number is '||num5);
while num5 > 0
loop
revnum := revnum * 10;
revnum := revnum + mod(num5,10);
num5 := trunc(num5/10);
end loop;
dbms_output.put_line('Reverse number is '||revnum);
end;
/
答案 1 :(得分:0)
如果我说你要反转一个数字(或字符串),我理解你的问题? 因此2468变为8642.我认为还有另一种方法可以实现这一点。
declare
num5 int:=54321;
revnum int:=0;
temp int;
num int;
lv_num5 varchar2(100);
ln_num5 number(3);
lv_rev_num5 varchar2(100) := null;
ln_rev_num5 number(3);
begin
lv_num5 := to_char(num5);
ln_num5 := length(lv_num5);
for x in reverse 1..ln_num5 -- From the last digit to the first digit
lv_rev_num5 := lv_rev_num5||substr(lv_num5, x, 1);
end loop;
ln_rev_num5 := to_number(lv_rev_num5);
dbms_output.put_line('1- Original number is '||num5);
-- Or
dbms_output.put_line('2- Original number is '||lv_num5);
dbms_output.put_line('Reverse number is '||ln_rev_num5);
end;
/
我希望这个解决方案也适合你。
问候 卡洛斯