C#高手们,你们能解释这是什么现象吗? it is a bad idea to use "==" with floating numbers, tryif(Math.Abs(a/b - 0.66f) < 0.0001){}else{} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把代码改为:float a=float.Parse((0.2178).ToString());float b=float.Parse((0.33).ToString());Console.WriteLine(a/b);if(float.Parse(Convert.ToString(a/b))==float.Parse((0.66).ToString()))Console.WriteLine("1");elseConsole.WriteLine("0");这一个程序才正确,具体原因我现在也没有弄明白。 这是机器运算精度误差造成的一般可设一个容差闵值eps,让他们之差的绝对值在eps内就认为他们相等。 呵呵,这是浮点数的存贮有误差引起的 “Console.WriteLine(a/b);”这一句之所以输出0.66是因为计算结果在ToString()的时候被近似作了0.66(恰巧在这里无误差) (a/b==0.66f)之所以为false也是因为存储误差(其实还有计算误差和舍入时的精度误差,比如计算机认为1.0/3.0=0.3333333)引起的 所以,强烈建议不要“比较两个浮点数相等”——这是非常不可靠的!! 有例如 if(0.618f/1.414f*0.707f==0.500f)Console.WriteLine("equal"); else Console.WriteLine("not equal"); 就输出 "not equal" 还有if(9E-400==0)Console.WriteLine("wrong");输出“wrong” 崇拜saucer(思归, MS .NET MVP) 如何用C#实现网络编程 进度条窗口如何做? msiexec.exe卸载程序突然不管用了 C#如何用HOTMAIL发邮件给HOSMAIL用户 winform程序,在一窗体更新数据在另一窗体中用DataGrid控件显示更新数据的问题,急急急 数据集更新的问题 初学者问个弱弱的问题 大侠进来救命. 快断气啦! 如何解决datagridview显示速度问题 Microsoft.phone.shell无法引用 关于界面设计的问题:不规则界面的设计 谁有C#经典算法啊,现在才有点领悟为什么大家都说‘思想才是最重要的’
float a=float.Parse((0.2178).ToString());
float b=float.Parse((0.33).ToString());
Console.WriteLine(a/b);
if(float.Parse(Convert.ToString(a/b))==float.Parse((0.66).ToString()))
Console.WriteLine("1");
else
Console.WriteLine("0");
这一个程序才正确,具体原因我现在也没有弄明白。
一般可设一个容差闵值eps,让他们之差的绝对值在eps内就认为他们相等。
“Console.WriteLine(a/b);”这一句之所以输出0.66是因为计算结果在ToString()的时候被近似作了0.66(恰巧在这里无误差)
(a/b==0.66f)之所以为false也是因为存储误差(其实还有计算误差和舍入时的精度误差,比如计算机认为1.0/3.0=0.3333333)引起的
所以,强烈建议不要“比较两个浮点数相等”——这是非常不可靠的!!
有例如 if(0.618f/1.414f*0.707f==0.500f)Console.WriteLine("equal");
else Console.WriteLine("not equal");
就输出 "not equal"
还有if(9E-400==0)Console.WriteLine("wrong");输出“wrong”