代码之家  ›  专栏  ›  技术社区  ›  Imad

计算相同的值后,为什么float大于double?为什么float不能隐式转换为Decimal

  •  0
  • Imad  · 技术社区  · 6 年前

    1. 为什么要浮动 0.3333333 >双倍 0.333333333333333 ?

    这是证明它的程序。

            static void Main(string[] args)
            {
                int a = 1;
                int b = 3;
                float f = Convert.ToSingle(a) / Convert.ToSingle(b);
                double db = Convert.ToDouble(a) / Convert.ToDouble(b);
                Console.WriteLine(f > db);
                Console.Read();
            }
    
    1. 为什么? float 无法隐式转换为 decimal int 你能吗?

    decimal d1 = 0.1f; //error
    decimal d2 = 1; //no error
    
    2 回复  |  直到 6 年前
        1
  •  5
  •   Sweeper    6 年前

    第一个问题, float 实际转换为 double 当你使用 > (double)f ,您将看到它的价值:

    0.333333343267441
    

    db 是:

    0.333333333333333
    

    对于第二个问题,虽然没有从 浮动 decimal ,有一个显式的,因此可以使用强制转换:

    float a = 0.1f; 
    decimal d = (decimal)a;
    

    为什么? 这是,但我推测这种转换不是你应该做的,所以你需要明确的。你为什么不这样做?因为 十进制的 浮动 双重的

        2
  •  2
  •   Eric Postpischil    6 年前
    1. 当源文本中的数字,如 .3333333 float 价值 .3333333 略大于.3333333;为0.3333333134651184082031225,而 double 最接近0.333333的值略小于0.3333332981762708868700428865849971771240234375。由于0.333333313465118408203125大于0.333333332981762708868700428865849971771240234375, f > db 计算结果为true。

    2. 我不熟悉C的规则及其十进制类型。然而,我怀疑原因 decimal d1 = 0.1f; 不允许在 decimal d2 = 1; 浮动 值可以转换为 decimal 没有错误,而所有 int 十进制的 According to Microsoft , 十进制的 内景 浮动 ,其最大有限值为2 96 1,约7.922810 28 浮动 是2 128 2 104 38 .