我在当前项目中将字节转换为千兆字节时遇到了一些麻烦.最初我这样做了:
long requiredDiskSpace = 5000000000000; // In bytes
int gb = (int)requiredDiskSpace / 1024 / 1024 / 1024;
Run Code Online (Sandbox Code Playgroud)
该计算变为0.(正确应为4 656).然后我切换到decimal类型,像这样:
long requiredDiskSpace = 5000000000000; // In bytes
decimal gb = requiredDiskSpace / 1024 / 1024 / 1024;
int gbAsInt = (int)gb;
Run Code Online (Sandbox Code Playgroud)
这个计算(正确)使gbAsInt4 656.
现在,我的问题很简单; 为什么?对我来说,计算看起来很相似,因为我对任何十进制数不感兴趣,我不明白为什么我不能在实际计算中使用int.
您正在尝试将5000000000000转换为整数.这将无法正常工作,因为该数字大于Int.MaxValue所以你应该做的事情:
int gb = (int)(requiredDiskSpace / 1024 / 1024 / 1024);
Run Code Online (Sandbox Code Playgroud)
你的问题就(int)在那里.您是铸造的long,以int这种方式.但是5000000000000不能容纳32位整数,所以你最终得到的数字在-2 31和2 31之间完全不同.除以1073741824然后得到0.
我怀疑你只是希望将结果转换为int:
int gb = (int)(requiredDiskSpace / 1024 / 1024 / 1024);
Run Code Online (Sandbox Code Playgroud)