为什么我不能使用int来计算字节到千兆字节?

Ama*_*ein 3 c#

我在当前项目中将字节转换为千兆字节时遇到了一些麻烦.最初我这样做了:

 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.

Syn*_*der 9

您正在尝试将5000000000000转换为整数.这将无法正常工作,因为该数字大于Int.MaxValue所以你应该做的事情:

int gb = (int)(requiredDiskSpace / 1024 / 1024 / 1024);
Run Code Online (Sandbox Code Playgroud)


Fil*_*erg 8

问题是(int)requiredDiskSpace,5000000000000对于整数,该值太大了.


Joe*_*oey 5

你的问题就(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)