大家注意下面代码的输出结果,你可以拿计算器算下,看是不是不一样,你知道问题在哪吗?
明眼人一看就明白的
namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            float f = Convert.ToSingle((0x7FF / 400) * 232.781 + 0x800);
            Console.Write(f);            Console.ReadLine();
        }
    }
}
计算器结果:3239.2567675
程序结果:3211.905纯属散分,路过的来接分
问题虽然简单,不过有时候容易犯错!
本人不小心的错误,贴在这里!

解决方案 »

  1.   

    本帖最后由 caozhy 于 2011-04-27 16:50:12 编辑
      

  2.   

    float f = Convert.ToSingle((0x7FF / (float)400) * 232.781 + 0x800);这问题不值这么多分吧,你真是财主
      

  3.   

    这种问题一般都是数据类型惹的祸
    float f = Convert.ToSingle((0x7FF / (float)400) * 232.781 + 0x800);
      

  4.   

     0x7FF / 400 结果为5;
     0x7FF /(float ) 400结果为5.1175;
      

  5.   

    0x7FF / 400的结果是int类型,即400的数据类型,这就会去掉结果的小数部分,这样写Double f = Convert.ToSingle((0x7FF / 400D) * 232.781 + 0x800);结果就和计算器结果接近了
      

  6.   

     (float)400  -> 400f