如果我们在没有任何演员的情

时间:2018-05-18 16:34:54

标签: c# .net floating-point double

  

这里我有一个代码(只是玩游戏)

using System ;
class program{
    static void Main(string[] args)
    {
        float a = 4.246f;
        double b = 8.492;
        System.Console.WriteLine(a*2);
        System.Console.WriteLine(b/a);
    }
}
  

这里的预期结果是2,但它给出了奇迹般的结果。“2.0000000880453”。   (我知道它需要铸造所需的结果)。

     

但我的问题是代码如何得出这个奇迹结果。如果它们不兼容,那么为什么它没有给出错误

1 个答案:

答案 0 :(得分:2)

运行时可以自由地以更高的精度执行浮点运算,然后在赋值时截断(如果需要)。最终,如果你将一个双倍除以一个浮点数,你将得到一个双后卫,除非你专门施放到一个浮点数。这可以通过以下方式确认:

new Number(5) == 5 //logs true because abstract comparison is used. The object is downcast to the primitive type

new Number(5) === 5 //logs false when used with strict comparison that also compares types

new Number(5) == new Number(5) //logs false - type coersion not required, references are not equal

new Number(5) === new Number(5) //logs false  - references are not equal

在某些情况下,即使您将具有浮点的操作分配给浮点数,操作仍然可以由运行时以更高的精度执行。在this question中就是这种情况的一个例子。