[英]How to Convert from double to Int64
我试图将双重转换为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
不能表示舍入值,因此您将获得异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.