51Testing软件测试论坛
标题:
3*647.6<>1942.8?,关于winrunner数值的计算!
[打印本页]
作者:
kper4
时间:
2005-3-30 10:35
标题:
3*647.6<>1942.8?,关于winrunner数值的计算!
使用 winrunner 7.5 ,示例程序 fight 1A ,gui map: fight_cchs
测试 每个 order 的 票总数与计算值是否相等(书上的例子)
在 fax order 中,读取了 tickets,price,total 三个,如下:
edit_get_text("# Tickets:",tickets);
edit_get_text("Ticket Price:",price);
edit_get_text("Total:",total);
利用数据驱动对每个 order 进行测试后,发现 tickets 为 3 的数据计算总是出错
我的判断是这样的:
if(tickets*price == total)
tl_step("total",0,"Correct. "tickets" tickets at $"price" cost $"total".");
else
{
tl_step("total",1,"Error. "tickets" tickets at $"price" does not equal $"total".");
report_msg(tickets*price);
}
总是会报错,后来我发现计算值减总数: tickets*price - total竟然不等于零,竟然是 2.273736754 E-13
晕啊,这是怎么回事??,只有数据是 3的时候出现这个错误,
后来我采取:
tickets=sprintf("%.3f",tickets);
price=sprintf("%.3f",price);
total=sprintf("%.3f",total);
依然不行,这是怎么回事??
谢谢
作者:
zhenhaiou
时间:
2005-3-30 10:52
晕,取小数点后1位
作者:
kper4
时间:
2005-3-30 11:05
不行,有的计算植延伸到后两位了
还有,我 %.16f 发现 取值 647.60000000000000020 ,多出一个 “2”,是内存存储上的原因吗`?
作者:
kper4
时间:
2005-3-30 13:59
期待有朋友解答`~`
作者:
shyfish
时间:
2005-3-30 15:02
二进制来表达十进制就是有点误差的,对于浮点的。取1.0e-6以上的
作者:
kper4
时间:
2005-3-31 12:53
那也就是说。没有办法在测试中避免这个误差了`?
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2