注册 登录
编程论坛 ASP技术论坛

两个精度数比较

linjirongll 发布于 2009-07-27 10:59, 567 次点击
<%
a=11111111111111102.21
b=11111111111111102.2

if a>= b then
    response.Write "OK"
    else
    response.Write "no"
    end if
%>
输入的永远都是OK


请问怎么样实现精度比较啊。。

用过cdbl(a)>=cdbl(b)也不行,输出的还是OK

急求帮助,,,,,
6 回复
#2
mgmt_asp2009-07-27 12:12
不懂- -看看..

[[it] 本帖最后由 mgmt_asp 于 2009-7-27 12:15 编辑 [/it]]
#3
mgmt_asp2009-07-27 12:27
找到了,用formatnumber试试
a=formatnumber(11111111111111102.21,2)
b=formatnumber(11111111111111102.2,2)
这样试了下,可以比较大小,不知是不是你想要的
其中:
formatnumber(11111111111111102.21)是要比较的数字
formatnumber(2)是小数点后保留的位数(不足两位时补0)
希望对你有所启发
#4
linjirongll2009-07-27 13:04
还是不行啊兄弟。。
#5
mgmt_asp2009-07-27 16:13
<%
a=formatnumber(11111111111111102.21,2)
b=formatnumber(11111111111111102.2,2)

if a < b then
    response.Write "OK"
    else
    response.Write "no"
    end if
%>

运行显示 no

怎么不行呢
#6
linjirongll2009-07-27 17:07
你试下把b=formatnumber(11111111111111102.25,2)
看结果是什么就知道了
#7
水濂山人2009-07-28 07:30
超过精度范围之外的所谓高精度的比较,只能采取字符比较,这是奥赛的比赛项目。高位数字运算,也是此法。(例如圆周率的运算。)
你把源代码变成:
<%
a=11111111111111102.21
b=11111111111111102.2
response.Write a
response.Write b
if a>= b then
    response.Write "OK"
    else
    response.Write "no"
    end if
%>
就知道15位以上,肯定是超出了精度。此时比较后面的尾数,已经没有意义了。除非变成字符串进行比较。
1