令人困惑的部分数据类型转换

时间:2015-11-27 06:10:46

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

我读过C#书,有这个例子。问题是,为什么heck float会丢失数字" 1"来自int值??? 不浮动的幅度更大吗?

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

2 个答案:

答案 0 :(得分:1)

float是32位数,由24位尾数和8位指数组成。

时会发生什么
float f = ii;

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

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

答案 1 :(得分:0)

float不适用于大整数。如果您想使用大数字,并且您知道它并非总是整数,请使用double

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

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

相关问题