我正在尝试获取一个文件并将其拆分为512kb块。要计算块的数量,我需要做一些基本的数学运算。出于某种原因,我遇到了一些数据丢失问题。我无法弄清楚我做错了什么。我目前有:
int chunkSize = 524288; // 512kb
int fileByteCount = GetFileSizeInBytes();
decimal result = ((decimal)(fileByteCount)) / ((decimal)(chunkSize));
int packetCount = Math.Ceiling(result); // Doesn't work.
我不能使用Math.Ceiling,因为它需要一个double。但是,我认为,我需要使用小数来进行数学运算。我究竟做错了什么?我该如何进行基本的数学运算?
答案 0 :(得分:8)
使用整数数学:
int chunkSize = 524288; // 512kb
int fileByteCount = GetFileSizeInBytes();
int packetCount = (fileByteCount + chunkSize - 1) / chunkSize;
请注意,文件大小应该 long ,传输大于2 GB的文件并不罕见。
答案 1 :(得分:3)
如果您想使用result
Math.Ceiling
转换为双精度版
int packetCount = Math.Ceiling((double)result);
答案 2 :(得分:0)
我不确定你的确切错误是什么,但似乎你需要在使用Math.Ceiling时将packetCount转换为整数:
int chunkSize = 524288;
int fileByteCount = 569344;
decimal result = ((decimal)(fileByteCount)) / ((decimal)(chunkSize));
int packetCount = Convert.ToInt32(Math.Ceiling(result));
答案 3 :(得分:0)
这是一个四舍五入的问题。请尝试以下方法。
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;