如何从double转换为Int64

udm*_*der 2 .net c# type-conversion

我试图将双重转换为Int64并获得一些奇怪的行为.为了测试我的问题,我尝试了以下代码:

double temporary = Int64.MaxValue;
Int64 tem = Convert.ToInt64(temporary);
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 8

其关键在于并非所有实数都可以用有限浮点数据类型表示.特别是,有64位整数值没有精确表示为双精度浮点值.

价值Int64.MaxValue9,223,372,036,854,775,807.最接近的双精度值是9,223,372,036,854,775,808.所以当

double temporary = Int64.MaxValue;
Run Code Online (Sandbox Code Playgroud)

执行时,temporary实际分配的值9,223,372,036,854,775,808.0.

当您尝试将此双精度值转换Int64为时,由于值超出而发生溢出Int64.MaxValue.

  • @Steve当然.那是因为`临时 - 1 ==临时';-)想一想. (2认同)