将字节转换为百分比

Convert Bytes to Percentage

我想将字节数转换为百分比。该百分比将代表已上传文件的总量。

例如,我有:

int64_t totalBytesSent
int64_t totalBytesExpectedToSend

我想将其转换为百分比(浮点数)。

我试过这个:

int64_t percentage = totalBytesSent/totalBytesExpectedToSend;

还有这个:

[NSNumber numberWithLongLong:totalBytesSent];
[NSNumber numberWithLongLong:totalBytesExpectedToSend];
CGFloat = [totalBytesSent longLongValue]/[totalBytesExpectedToSend longLongValue];

我想我在尝试做的过程中遗漏了一些东西 'byte-math'。有谁知道如何将字节转换为百分比?

只要用一个整数值(整数大小无关)除以一个更大的整数值,结果将始终为 0。

如果不需要小数,则在除法之前将 totalBytesSent 值乘以 100,或者在除法之前将值转换为浮点值。

以下代码将生成 0 到 100 之间的百分比值:

int64_t percentage = totalBytesSent*100/totalBytesExpectedToSend;

您曾与:

int64_t percentage = totalBytesSent/totalBytesExpectedToSend;

这会 return 一个介于 0 和 1 之间的数字...但是您正在用整数进行数学运算。将其中之一转换为 CGFloatfloatdouble 等,然后将其乘以 100,或者如果您不想,则在除法之前将 totalBytesSent 乘以 100做浮点数学:

int64_t percentage = (double)totalBytesSent/totalBytesExpectedToSend * 100;    //uses floating point math, slower
//or
int64_t percentage = totalBytesSent*100/totalBytesExpectedToSend;  //integer division, faster

此外,您为什么对所有内容都使用 int64?您真的需要发送 EB 级数据吗? unsigned 可能是最佳选择:

unsigned totalBytesSent
unsigned totalBytesExpectedToSend

unsigned percentage = totalBytesSent*100/totalBytesExpectedToSend;

如果您希望百分比中有小数点,请使用浮点数学除法并将结果存储为浮点类型:

CGFloat percentage = totalBytesSent*100/totalBytesExpectedToSend;