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

本文关键字:类型转换 数据 | 更新日期: 2023-09-27 18:24:36

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

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

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

浮点是由24位尾数和8位指数组成的32位数字。时会发生什么

float f = ii;

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

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

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

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

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