C# 在C中使用带整数的Math.天花板#

C# 在C中使用带整数的Math.天花板#,c#,double,decimal,C#,Double,Decimal,我正在尝试获取一个文件并将其拆分为512kb的块。为了计算块的数量,我需要做一些基本的数学运算。由于某些原因,我遇到了一些数据丢失问题。我不知道我做错了什么。我目前有: int chunkSize = 524288; // 512kb int fileByteCount = GetFileSizeInBytes(); decimal result = ((decimal)(fileByteCount)) / ((decimal)(chunkSize)); int packetCount = M

我正在尝试获取一个文件并将其拆分为512kb的块。为了计算块的数量,我需要做一些基本的数学运算。由于某些原因,我遇到了一些数据丢失问题。我不知道我做错了什么。我目前有:

int chunkSize = 524288;  // 512kb
int fileByteCount = GetFileSizeInBytes();
decimal result = ((decimal)(fileByteCount)) / ((decimal)(chunkSize));
int packetCount = Math.Ceiling(result);   // Doesn't work.

我不能用数学。天花板,因为它需要一个双人床。但是,我想,我需要用一个小数来计算。我做错了什么?如何执行此基本数学运算?

如果要使用
math.天花

int packetCount = Math.Ceiling((double)result); 

我不确定您的确切错误是什么,但在使用Math时,似乎需要将packetCount转换为整数。天花板:

int chunkSize = 524288;
int fileByteCount = 569344;
decimal result = ((decimal)(fileByteCount)) / ((decimal)(chunkSize));
int packetCount = Convert.ToInt32(Math.Ceiling(result));

这是一个取舍问题。尝试以下方法

int chunkSize = 524288;  // 512kb 
int fileByteCount = GetFileSizeInBytes(); 
decimal result = (decimal)fileByteCount / (decimal)chunkSize; 
decimal remainder = decimal.Remainder((decimal)fileByteCount, (decimal)chunkSize);
int packetCount = (remainder > 0) ? (int)(result + 1) : (int)result;
使用整数数学:

int chunkSize = 524288;  // 512kb
int fileByteCount = GetFileSizeInBytes();
int packetCount = (fileByteCount + chunkSize - 1) / chunkSize;

请注意,文件大小应该很长,传输大于2G字节的文件并不少见。

只需使用
int
division就可以获得发言权。如果文件大小不能被块大小整除(使用模运算),那么你可以加1@Damien_the_unsiver:作为一个答案,这比其他发布的内容更合理。为那些摆脱所有愚蠢的强制转换/转换的人欢呼。