请教这样的数据比较为何不等?

evenhu 2003-09-29 11:57:59
unuseddata.field1 = (field1.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field1.Text.Trim());
unuseddata.field2 = (field2.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field2.Text.Trim());
unuseddata.field3 = (field3.Text.Trim()==String.Empty)?0:Convert.ToInt32(field3.Text.Trim());
unuseddata.field4 = (field4.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field4.Text.Trim());
unuseddata.field5 = (field5.Text.Trim()==String.Empty)?0:Convert.ToInt32(field5.Text.Trim());
unuseddata.field6 = (field6.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field6.Text.Trim());
unuseddata.field7 = (field7.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field7.Text.Trim());
unuseddata.field8 = (field8.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field8.Text.Trim());
unuseddata.field9 = (field9.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field9.Text.Trim());
unuseddata.field10 = (field10.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field10.Text.Trim());
unuseddata.field11 = (field11.Text.Trim()==String.Empty)?0:Convert.ToInt32(field11.Text.Trim());
unuseddata.field12 = (field12.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field12.Text.Trim());
unuseddata.field13 = (field13.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field13.Text.Trim());
unuseddata.field14 = (field14.Text.Trim()==String.Empty)?0:Convert.ToInt32(field14.Text.Trim());
unuseddata.field15 = (field15.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field15.Text.Trim());
unuseddata.field16 = (field16.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field16.Text.Trim());
unuseddata.field17 = (field17.Text.Trim()==String.Empty)?0:Convert.ToInt32(field17.Text.Trim());
unuseddata.field18 = (field18.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field18.Text.Trim());
unuseddata.field19 = (field19.Text.Trim()==String.Empty)?0.0f:Convert.ToSingle(field19.Text.Trim());
unuseddata.field20 = (field20.Text.Trim()==String.Empty)?0:Convert.ToInt32(field20.Text.Trim());

我有如下的数据比较:
Response.Write(unuseddata.field1);
Response.Write(unuseddata.field2+unuseddata.field6+unuseddata.field7+unuseddata.field8);
Response.Write(unuseddata.field9+unuseddata.field12+unuseddata.field15+unuseddata.field18);
Response.Write(unuseddata.field1==(unuseddata.field2+unuseddata.field6+unuseddata.field7+unuseddata.field8));
Response.Write(unuseddata.field1==(unuseddata.field9+unuseddata.field12+unuseddata.field15+unuseddata.field18));

输入测试数据后,打印出来的结果为:
10.18 10.18 10.18 False False
都为10.18,所以后两个打印出来的值都为true才对呀,问题是出在哪里了??
...全文
71 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
精度定义要合适啊,按你的题意,应该:

delt=0.01;
evenhu 2003-09-29
  • 打赏
  • 举报
回复
jjcccc() 的方法if ((f2-f1)<delt)
还是返回false
evenhu 2003-09-29
  • 打赏
  • 举报
回复
试一下先
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
对float和double类型的数据比较大小严格来说一般不能用相等比较,而是用>或<比较,举例说:

float f1=0.1293923012;
float f2=0.1293923012001;

比较时根据情况定一个合适比较精度范围:

float delt=0.00000000001;

if ((f2-f1)<delt)
{
//就认为相等
}
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
因为unuseddata.field1与unuseddata.field2+unuseddata.field6+unuseddata.field7+unuseddata.field8不相等啊。

因为考虑到float数据的精度问题,上面表达式的左右两边虽然在两位小数位时是一样的,但值不一定相等。
seesea125 2003-09-29
  • 打赏
  • 举报
回复
Response.Write((unuseddata.field1).Equals(unuseddata.field9+unuseddata.field12+unuseddata.field15+unuseddata.field18));试试
evenhu 2003-09-29
  • 打赏
  • 举报
回复
自己UP一下
evenhu 2003-09-29
  • 打赏
  • 举报
回复
谢谢 jjcccc() ,我再多测试两次,如果真的OK了,就结
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
这样最好
evenhu 2003-09-29
  • 打赏
  • 举报
回复
看来必须要加ToString("f2") 了,是不是这样子的
evenhu 2003-09-29
  • 打赏
  • 举报
回复
如果
Response.Write(unuseddata.field1.ToString("f5") == f.ToString("f5"));这样的话,打印的结果倒是true了,
evenhu 2003-09-29
  • 打赏
  • 举报
回复
两个都是一样的,是10.18000
seesea125 2003-09-29
  • 打赏
  • 举报
回复
程序换成Convert.ToDouble再比较试试
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
你先用:

float f=unuseddata.field2+unuseddata.field6+unuseddata.field7+unuseddata.field8);
Response.Write(unuseddata.field1.ToString("f5"));
Response.Write(f.ToString("f5"));

看看两个数到底是什么?
evenhu 2003-09-29
  • 打赏
  • 举报
回复
jjcccc()

是这样试的,但还是返回false
zag 2003-09-29
  • 打赏
  • 举报
回复
精度问题吧。
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
另最好加上取绝对值一下再比较。
阿拉丁 2003-09-29
  • 打赏
  • 举报
回复
对float和double类型的数据比较大小严格来说一般不能用相等比较,而是用>或<比较,举例说:,


jjcccc() 说得对,这是基本思路!
jjcccc 2003-09-29
  • 打赏
  • 举报
回复
Response.Write((unuseddata.field1-(unuseddata.field2+unuseddata.field6+unuseddata.field7+unuseddata.field8))<0.01f);

是这样试的吗?
evenhu 2003-09-29
  • 打赏
  • 举报
回复
还是不行哪

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧