为何排序会排出12比3小?
程序如下test.asp:
<html>
<head>
<title></title>
</head>
<body>
<%
dim hmsz(5)
for i=1 to 5
hmsz(i)=trim(request.form("hm"&i))
next
response.write "排序前:"&hmsz(1)&"、"&hmsz(2)&"、"&hmsz(3)&"、"&hmsz(4)&"、"&hmsz(5)&"<br>"
for i=1 to 5
for j=i+1 to 5
if hmsz(i)>hmsz(j) then
hmsz(0)=hmsz(i)
hmsz(i)=hmsz(j)
hmsz(j)=hmsz(0)
end if
next
next
response.write "排序后:"&hmsz(1)&"、"&hmsz(2)&"、"&hmsz(3)&"、"&hmsz(4)&"、"&hmsz(5)
%>
<p align="center"><font color="black" size="6"><b>请输入数据</b></font></p>
<div align="center"><center><table border="1" cellspacing="0" width="68%" bgcolor="#F0F8FF" bordercolorlight="#4DA6FF" bordercolordark="#ECF5FF">
<tr>
<td width="15%" align="center" bgcolor="#0080c0"><font color="#FFFFFF"><strong>数字1</strong></font></td>
<td width="15%" align="center" bgcolor="#0080c0"><font color="#FFFFFF"><strong>数字2</strong></font></td>
<td width="15%" align="center" bgcolor="#0080c0"><font color="#FFFFFF"><strong>数字3</strong></font></td>
<td width="15%" align="center" bgcolor="#0080c0"><font color="#FFFFFF"><strong>数字4</strong></font></td>
<td width="15%" align="center" bgcolor="#0080c0"><font color="#FFFFFF"><strong>数字5</strong></font></td>
</tr>
<tr><form name="Frm" method=post >
<td width="15%" align="center"><input type='text' name="hm1" size="2" maxlength="2" ></td>
<td width="15%" align="center"><input type='text' name="hm2" size="2" maxlength="2" ></td>
<td width="15%" align="center"><input type='text' name="hm3" size="2" maxlength="2" ></td>
<td width="15%" align="center"><input type='text' name="hm4" size="2" maxlength="2" ></td>
<td width="15%" align="center"><input type='text' name="hm5" size="2" maxlength="2" ></td>
</tr>
<tr><td colspan="7" align="center">
<input type='submit' value="添加" name="add" >
<input type='reset' value="清除" name="clear">
</td></tr>
</form>
</table>
</center></div>
</body>
</html>
当输入的数全部们1位数或2位数时可以排序正确,但当输入的数有1位数和2位数混合时就不正确了,排出来的数是数字的第1位数小的先,如:12比3小
问题点数:0、回复次数:16Top
1 楼inelm(木野狐)回复于 2003-12-01 22:59:48 得分 0
你用的是字符串的比较, 由于是一位一位的比较, 所以得出错误的结果。
只要把字符串转化为整数进行比较即可。
如:
a = "12"
b = "3"
你原先这样比较: if a > b then ... , 这个条件的结果是 false
改成: if cint(a) > cint(b) then ..., 结果就变成 true 了
// ------------------
// Archimond 阿克蒙德
Top
2 楼net_lover(【孟子E章】)回复于 2003-12-01 23:00:13 得分 0
hmsz(i)=CLng(trim(request.form("hm"&i)))Top
3 楼chenliang0629(狼)回复于 2003-12-01 23:02:35 得分 0
错误原因:没有将变量转化成数字型,默认是按字符型在做比较,即按从左到右的顺序比较第一位、第二位……
只需将第九行改为:
hmsz(i)=cint(request.form("hm"&i))
即可了。Top
4 楼milanrain(ljfdlkaj)回复于 2003-12-01 23:37:48 得分 0
呵呵 我以前也碰到过这个问题 简单想想不就是实际上程序在比较第一位数字嘛 如果第一位的比较成立拉它就不往下比较拉 很显然12中的“1”没有3中的“3”大,这样的结果是字符比较造成的! 所以最好就像net_lover所说的那样的转换成实数再比较,或者转化成整数,用
cint()函数!Top
5 楼powerc1(powerc1)回复于 2003-12-01 23:37:50 得分 0
谢谢各位大侠指点,问题解决了,不过 chenliang0629(chen)大虾,的hmsz(i)=cint(request.form("hm"&i))去掉了trim,如果用户前后误输入的空格怎么办?如果不要trim又会类型不匹配,唉... ...Top
6 楼freespace520(自由人)回复于 2003-12-02 09:07:12 得分 0
那你再用个类型转换的函数呀
比如说:clng()Top
7 楼powerc1(powerc1)回复于 2003-12-02 23:14:52 得分 0
在哪用?Top
8 楼h2high(菜乌?比菜鸟差一点:))回复于 2003-12-02 23:26:03 得分 0
人家 net_lover(孟子E章) ( )不是去了空格再转的吗?
hmsz(i)=CLng(trim(request.form("hm"&i)))
先trim再clng或cint什么的都行
Top
9 楼powerc1(powerc1)回复于 2003-12-03 19:28:34 得分 0
用hmsz(i)=CLng(trim(request.form("hm"&i))),系统提示出错,“类型不匹配”Top
10 楼zhengxianping(丫丫)回复于 2003-12-03 21:54:10 得分 0
哥们检查类型呀,要了解一下比较的原理呀Top
11 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-03 23:34:27 得分 0
hmsz(i)=cdbl(trim(request.form("hm"&i)))
函数名称决定返回类型,如下所示:
函数 返回类型 expression 参数范围
CBool Boolean 任何有效的字符串或数值表达式。
CByte Byte 0 至 255。
CCur Currency -922,337,203,685,477.5808 至922,337,203,685,477.5807。
CDate Date 任何有效的日期表达式。
CDbl Double 负数从 -1.79769313486232E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDec Decimal 零变比数值,即无小数位数值,为
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为
+/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CInt Integer -32,768 至 32,767,小数部分四舍五入。
CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStr String 依据 expression 参数返回 Cstr。
Top
12 楼opolmzy(ASP)( 一寸木)回复于 2003-12-19 12:04:46 得分 0
递归方法
今天面试刚好有一道题是排序的
呵呵
Top
13 楼azh9703(九百九十九朵煤气罐)回复于 2003-12-19 13:49:20 得分 0
排序方法用 冒泡排序法Top
14 楼jfly301(海浪~~)回复于 2003-12-19 14:02:47 得分 0
这是很基本的问题,大家都说出来了,
我也用不做说了,多调试就会明白了,。Top
15 楼JohnsonPoon(1分钱买2个我)回复于 2003-12-19 14:21:26 得分 0
把数值位数不足补零再按字符排就可以了
Top
16 楼hnfz123(hnfz)回复于 2003-12-19 14:39:46 得分 0
数据类型问题,
如果是字符 12 比 3 小
如果是数字 12 比 3 大Top




