【问题标题】:confusing part of data type conversion数据类型转换的混乱部分
【发布时间】:2015-11-27 06:10:46
【问题描述】:

我读过 C# 书,有这个例子。问题是,为什么浮点数会从 int 值中丢失数字“1”??? 浮动不是有更大的量级吗?

int i1 = 100000001;
float f = i1; // Magnitude preserved, precision lost (WHY? @_@)
int i2 = (int)f; // 100000000

【问题讨论】:

标签: c# visual-studio floating-point integer


【解决方案1】:

浮点数是由 24 位尾数和 8 位指数组成的 32 位数字。当

float f = ii;

尝试将 32 位整数压缩成 24 位尾数。尾数只存储 24 位(大约 6-7 位有效数字),因此超过第 6 位或第 7 位的任何内容都将丢失。

如果使用具有更多有效数字的双精度进行赋值,则该值将被保留。

【讨论】:

    【解决方案2】:

    float 不是为大整数设计的。如果您想使用大数字并且知道它并不总是整数,请使用double

       int i1 = 100000001;
       double f = Convert.ToDouble(i1);
       int i2 = Convert.ToInt32(f); // 100000001
    

    如果所有整数并且您希望能够使用它们进行计算,请使用 Int64 而不是 int

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 2022-01-20
      • 2019-11-17
      相关资源
      最近更新 更多