Objective c countOfBytesReceived 超过 countOfBytesExpectedToReceive returns 0.000000
Objective c countOfBytesReceived over countOfBytesExpectedToReceive returns 0.000000
我正在尝试计算 countOfBytesReceived / countOfBytesExpectedToReceive
但它要么是 returns 0.000000
要么是 1.000000
.
我在 countOfBytesReceived
和 countOfBytesExpectedToReceive
上都做了一个 NSLog
我可以看到 countOfBytesExpectedToReceive
与预期保持一致并且 countOfBytesReceived
发生了变化。
CGFloat progressRatio = [task countOfBytesReceived] / [task countOfBytesExpectedToReceive];
[progressView setProgress:progressRatio];
NSLog(@"%lld", [task countOfBytesReceived]);
NSLog(@"%lld", [task countOfBytesExpectedToReceive]);
NSLog(@"%f)", progressRatio);
但 progressRatio
总是 returns 0.000000
或 1.000000
不应该的时候。
我在 scheduledTimerWithTimeInterval
中有此代码,所以它每 0.01 运行。
我做错了什么?
这是因为 progressRatio 是用两个整数值相除计算得出的。在 C 中,当您将两个整数相除时,您会得到一个整数。那是。添加铸件以获得浮点数:
CGFloat progressRatio = (CGFloat) [task countOfBytesReceived] / (CGFloat )[task countOfBytesExpectedToReceive];
countOfBytesRecieved
和 countOfBytesExpectedToReceive
都是 64 位整数。 C 表达式求值会将二进制表达式的左参数或右参数提升为最兼容的类型。
(int64_t)a / (int64_t)b
但是由于这个表达式的两边都是 64 位整数,所以不需要转换并且它执行整数数学运算。鉴于这些值的性质,结果将是 0
(如果 a < b)或 1
(如果 a == b)。
C 然后计算下一个表达式:
(float)ratio = (int64_t)n
由于这是一个赋值,它必须将整数(1
或0
)转换为浮点值(1.0
或0.0
)。
如果要进行浮点除法,强制C把原来的整数转成浮点值先:
CGFloat progressRatio = (CGFloat)[task countOfBytesReceived] / (CGFloat)[task countOfBytesExpectedToReceive];
我正在尝试计算 countOfBytesReceived / countOfBytesExpectedToReceive
但它要么是 returns 0.000000
要么是 1.000000
.
我在 countOfBytesReceived
和 countOfBytesExpectedToReceive
上都做了一个 NSLog
我可以看到 countOfBytesExpectedToReceive
与预期保持一致并且 countOfBytesReceived
发生了变化。
CGFloat progressRatio = [task countOfBytesReceived] / [task countOfBytesExpectedToReceive];
[progressView setProgress:progressRatio];
NSLog(@"%lld", [task countOfBytesReceived]);
NSLog(@"%lld", [task countOfBytesExpectedToReceive]);
NSLog(@"%f)", progressRatio);
但 progressRatio
总是 returns 0.000000
或 1.000000
不应该的时候。
我在 scheduledTimerWithTimeInterval
中有此代码,所以它每 0.01 运行。
我做错了什么?
这是因为 progressRatio 是用两个整数值相除计算得出的。在 C 中,当您将两个整数相除时,您会得到一个整数。那是。添加铸件以获得浮点数:
CGFloat progressRatio = (CGFloat) [task countOfBytesReceived] / (CGFloat )[task countOfBytesExpectedToReceive];
countOfBytesRecieved
和 countOfBytesExpectedToReceive
都是 64 位整数。 C 表达式求值会将二进制表达式的左参数或右参数提升为最兼容的类型。
(int64_t)a / (int64_t)b
但是由于这个表达式的两边都是 64 位整数,所以不需要转换并且它执行整数数学运算。鉴于这些值的性质,结果将是 0
(如果 a < b)或 1
(如果 a == b)。
C 然后计算下一个表达式:
(float)ratio = (int64_t)n
由于这是一个赋值,它必须将整数(1
或0
)转换为浮点值(1.0
或0.0
)。
如果要进行浮点除法,强制C把原来的整数转成浮点值先:
CGFloat progressRatio = (CGFloat)[task countOfBytesReceived] / (CGFloat)[task countOfBytesExpectedToReceive];