将数字拆分为等于最后一部分等于或低于其余部分的部分

时间:2013-07-30 18:19:45

标签: java math filesplitting

我有一个文件,我想分成100件 文件大小为257019字节 当我在下面运行我的分离器代码时,得到99个大小为2545字节的部分,最后100个部分是5064字节。

我需要帮助弄清楚如何使前99个部分具有相同的大小,最后的第100个部分具有等于或低于2545的剩余字节。

int partSize;
for(partSize=1 ;partSize< 257019; partSize++){
   if((int) Math.ceil(257019 / partSize) == 100){
     break;
   }
}

int totalparts = (int) Math.ceil(257019 / partSize); // =100

2 个答案:

答案 0 :(得分:4)

int fileSize = 257019;
int partSize = Math.ceil( ((double)fileSize) / 100);
int lastPacket = 257019 - (99 * partSize);

在这种情况下:

int partSize = 2571;
int lastPacket = 257019 - 254529 = 2490 < 2571

您的代码的原始问题:

(int) Math.ceil(257019 / partSize) == 100

是在评估257019 / partSize之前评估Math.ceil。如果将整数除以整数,则结果自动为整数。整数的默认行为是省略除小数本身之外的所有内容,因此它将自动“Math.floor()”。

答案 1 :(得分:1)

int partSize = totalSize / 100;
if ((totalSize % 100) != 0) {
    partSize++;
}