-1

所以我有以下代码:

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.02. AppTest[768:307] 27,0.900000
2011-05-14 15:21:40.173 AppTest[768:307] 23,0.800000

0.800000 * 30 如何等于 23?

4

3 回答 3

1

这个问题有两个答案,要么

1) 使用round() 获取short 的整数值。
2)不要使用short,而是使用float。

我最终使用了选项 2

于 2011-06-21T02:19:11.340 回答
0

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

于 2011-05-14T03:44:17.677 回答
-1

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

于 2011-05-14T03:46:24.420 回答