如何从double转换为Int64

时间:2014-07-01 15:24:01

标签: c# .net type-conversion

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

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

将double转换为Int64时,我仍然会遇到溢出异常。这是一个错误吗?或者有什么我不理解的东西?

2 个答案:

答案 0 :(得分:7)

关键在于并非所有实数都可以用有限浮点数据类型表示。特别是,有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

答案 1 :(得分:2)

double无法准确代表Int64.MaxValue,因此它会被四舍五入。由于long无法表示向上舍入的值,因此您将获得例外。