将字节转换为百分比
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 之间的数字...但是您正在用整数进行数学运算。将其中之一转换为 CGFloat
、float
、double
等,然后将其乘以 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;
我想将字节数转换为百分比。该百分比将代表已上传文件的总量。
例如,我有:
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 之间的数字...但是您正在用整数进行数学运算。将其中之一转换为 CGFloat
、float
、double
等,然后将其乘以 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;