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时,我仍然会遇到溢出异常.这是一个错误吗?或者有什么我不理解的东西?
其关键在于并非所有实数都可以用有限浮点数据类型表示.特别是,有64位整数值没有精确表示为双精度浮点值.
价值Int64.MaxValue是9,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.
| 归档时间: |
|
| 查看次数: |
3955 次 |
| 最近记录: |