以文本方式查看主题

-  ╋艺 镇╋  (http://zyzsky.com/bbs/index.asp)
--  ┣◇网站建设&Web语言  (http://zyzsky.com/bbs/list.asp?boardid=4)
----  asp 取整函数int 奇怪的问题  (http://zyzsky.com/bbs/dispbbs.asp?boardid=4&id=2216)

--  作者:admin
--  发布时间:2010/9/3 11:57:55
--  韩国 change 排练舞蹈
用fix和int都不能得到正确的整数,我的目的是抛弃小数,但是  
<br>
    int:   <%=int(2.3*2680)%>  
  
 <br>
    fix:    <%=fix(2.3*2680)%>  
得到的结果都是6163,而不是实际的6164 
问题补充:
round 会产生四舍五入,所以无法使用

--  作者:admin
--  发布时间:2010/9/3 11:58:10
--  
微软有病,你知道下面的程序结果是什么吗?

<br> int: <%=int(23*268)%>
<br> int: <%=int(2.3*2680)%>
<br> int: <%=int(0.23*26800)%>


输出结果是:
int: 6164
int: 6163
int: 6164

为什么2.3*2680进行INT取整会被吃一个?





这里提出一个问题,使用INT、FIX对表达式计算结果进行取整,可能会出现你意料之外的问题,因为计算机内部对小数的表示是使用的定点的科学记数法,比如2.3*2680的计算结果可能是6.1639999E+0003,也就是6163.99999,这时候使用INT进行取整可能会出错,稳妥的取整方式是先四舍五入到小数点后面一位,然后再取整,方法如下:

<br> int: <%=int(round(2.3*2680*10)/10)%>

乘以10进行四舍五入之后再除以10,表示四舍五入代小数点后面一位,然后再INT或者FIX取整,这样就不会出现问题了。
--  作者:admin
--  发布时间:2010/9/3 13:24:14
--  
下表是三个函数取值的对比:


X INT(X) CINT(X) FIX(X)

3.26 3 3 3

3.76 3 4 3

-3.26 -4 -3 -3

-3.76 -4 -4 -3
另外也可以试一下:round()函数