如何从双精度转换到Int64
本文关键字:Int64 转换 双精度 | 更新日期: 2023-09-27 18:10:55
我正试图将双精度转换为Int64并得到一些奇怪的行为。为了测试我的问题,我尝试了以下代码:
double temporary = Int64.MaxValue;
Int64 tem = Convert.ToInt64(temporary);
在将double类型转换为Int64类型时,我仍然会得到溢出异常。这是臭虫吗?还是有什么我不明白的地方?
问题的关键在于并非所有实数都可以用有限的浮点数据类型表示。特别是,64位整数值不能精确表示为双精度浮点值。
Int64.MaxValue
的值为9,223,372,036,854,775,807
。与此最接近的双精度值是9,223,372,036,854,775,808
。所以当
double temporary = Int64.MaxValue;
执行时,赋给temporary
的值实际上是9,223,372,036,854,775,808.0
。
当您尝试将此双精度值转换为Int64
时,会发生溢出,因为该值超过Int64.MaxValue
。
double
不能完全表示Int64.MaxValue
,所以它被四舍五入。因为long
不能表示四舍五入的值,所以会出现异常。