Why same values differ with float and double
本问题已经有最佳答案,请猛点这里访问。
考虑这个计划
1 2 3 4 5 6 | float a = 0.7f; if (a < 0.7) { Console.WriteLine("Less"); } |
输出为
因为
很巧,
下面是一个小的演示,您可以运行它来查看系统上的值:
1 2 | printf("%20.20f %20.20f ", 0.7, (float)0.7); |
(IDeone上的现场演示)。
这里的教训是,您不应该期望
由于绝大多数分数都是近似的,所以最好将其与某种程度的公差进行比较。例如,不写
你在不知情的情况下在代码中比较苹果和土豆。
1 2 3 4 5 | float a = 0.7f; //"0.7f" is a float if(a< 0 .7) //"0.7" is a double { Console.WriteLine("Less"); //You'll see it because of different representations } |
如果您匹配数字类型,您的支票将按预期工作:
1 2 3 4 5 | float a = 0.7f; if(a < 0.7f) { Console.WriteLine("Less"); // You won't see this } |
这就是为什么数字不应该硬编码的原因。修复代码的最佳方法:
1 2 3 4 5 6 | float check = 0.7f; float a = 0.7f; if(a < check) { Console.WriteLine("Less"); // You won't see this either } |