UIProgressView进度乘以返回奇怪结果的数字

时间:2011-05-14 03:33:36

标签: iphone objective-c uiprogressview

所以我有以下代码:

angle = progbm.progress * 30;  
NSLog(@"%d,%f", angle, progbm.progress);  

progbm是一个UIProgressView(从0.0到1.0运行),角度很短。

在其他地方,我有代码可以向上或向下更新进度条0.1。然后我似乎得到了一些奇怪的结果。这是控制台输出:

2011-05-14 15:21:25.265 AppTest [768:307] 3,0.100000
2011-05-14 15:21:26.238 AppTest [768:307] 6,0.200000
2011-05-14 15:21:27.245 AppTest [768:307] 9,0.300000
2011-05-14 15:21:28.061 AppTest [768:307] 12,0.400000
2011-05-14 15:21:28.940 AppTest [768:307] 15,0.500000
2011-05-14 15:21:29.820 AppTest [768:307] 18,0.600000
2011-05-14 15:21:30.716 AppTest [768:307] 21,0.700000
2011-05-14 15:21:31.644 AppTest [768:307] 24,0.800000
2011-05-14 15:21:32.860 AppTest [768:307] 27,0.900000
2011-05-14 15:21:34.460 AppTest [768:307] 30,1.000000
2011-05-14 15:21:39.020 AppTest [768:307] 27,0.900000
2011-05-14 15:21:40.173 AppTest [768:307] 23,0.800000

0.800000 * 30如何等于23?

3 个答案:

答案 0 :(得分:1)

这有两个答案,

1)使用round()获取short的整数值 2)不要使用短裤而是使用浮子。

我最终使用了选项2

答案 1 :(得分:0)

我的猜测是舍入错误,这些错误未显示NSLog打印的精度。当你从1.0减去0.1时,你不一定得0.9。如果我没记错的话,就不可能用浮点表示法精确地表示0.1,因为在二进制中它是一个重复的十进制数。所以你最终会得到像0.899999或0.90000001这样的东西。然后当你从中减去另外0.1时,看起来你最终得到0.7999999999,NSLog正在四舍五入到0.800000进行打印,但是整数乘法总是向下舍入,所以23.9999999向下舍入到23。

答案 2 :(得分:-1)

您没有考虑到进展正在取得进展。 :-)它在您的计算和显示之间变化。将progbm.progress存储到用于计算和显示的变量中,您的问题就会消失。