如何从双精度转换到Int64

本文关键字:Int64 转换 双精度 | 更新日期: 2023-09-27 18:10:55

我正试图将双精度转换为Int64并得到一些奇怪的行为。为了测试我的问题,我尝试了以下代码:

double temporary = Int64.MaxValue;
Int64 tem = Convert.ToInt64(temporary);

在将double类型转换为Int64类型时,我仍然会得到溢出异常。这是臭虫吗?还是有什么我不明白的地方?

如何从双精度转换到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不能表示四舍五入的值,所以会出现异常。