数据类型转换中令人困惑的部分
本文关键字:类型转换 数据 | 更新日期: 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
。