У меня есть этот код:
partialProg = 100 * ((i+1) / len);
Log.i(null, "100 * (" + (i+1) + "/" + len + ")" );
Log.i(null, "" + (int) partialProg + " <- int cast original double -> " + partialProg);
, где partialProg
- это двойное число, инициализированное в 1.0 как глобальная переменная.partialProg
используется для вычисления прогресса в длительном процессе загрузки (len
- это количество точек данных для загрузки, а i
- текущая точка данных, в которой находится цикл).Логично, что это правильно.
Однако, мой ProgressDialog
всегда отображает 0% до последней итерации, в которой отображается 100%.
Любопытно, я использовал сообщения журнала, чтобы попытатьсянайти проблему.Я получаю такие результаты:
11-22 13:21:47.714: ERROR/(3110): LOOP ENTERED: 1 accelX to check for null: -2.329
11-22 13:21:48.044: DEBUG/rapi(3110): Successful request
11-22 13:21:48.044: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:48.064: INFO/(3110): 100 * (2/20)
11-22 13:21:48.074: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:48.104: ERROR/(3110): LOOP ENTERED: 2 accelX to check for null: -10.924
11-22 13:21:48.434: DEBUG/rapi(3110): Successful request
11-22 13:21:48.434: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:48.454: INFO/(3110): 100 * (3/20)
11-22 13:21:48.454: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:48.484: ERROR/(3110): LOOP ENTERED: 3 accelX to check for null: -8.281
11-22 13:21:48.664: DEBUG/rapi(3110): Successful request
11-22 13:21:48.674: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:48.694: INFO/(3110): 100 * (4/20)
11-22 13:21:48.694: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:48.754: ERROR/(3110): LOOP ENTERED: 4 accelX to check for null: -2.438
11-22 13:21:49.334: DEBUG/rapi(3110): Successful request
11-22 13:21:49.334: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:49.334: INFO/(3110): 100 * (5/20)
11-22 13:21:49.334: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:49.364: ERROR/(3110): LOOP ENTERED: 5 accelX to check for null: -9.657
11-22 13:21:49.554: DEBUG/rapi(3110): Successful request
11-22 13:21:49.554: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:49.554: INFO/(3110): 100 * (6/20)
11-22 13:21:49.554: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:49.584: ERROR/(3110): LOOP ENTERED: 6 accelX to check for null: 7.042
11-22 13:21:49.653: DEBUG/rapi(3110): Successful request
11-22 13:21:49.653: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:49.653: INFO/(3110): 100 * (7/20)
11-22 13:21:49.653: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:49.694: ERROR/(3110): LOOP ENTERED: 7 accelX to check for null: -6.347
11-22 13:21:49.814: DEBUG/rapi(3110): Successful request
11-22 13:21:49.814: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:49.814: INFO/(3110): 100 * (8/20)
11-22 13:21:49.824: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:49.844: ERROR/(3110): LOOP ENTERED: 8 accelX to check for null: -15.663
11-22 13:21:49.973: DEBUG/rapi(3110): Successful request
11-22 13:21:49.973: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:49.973: INFO/(3110): 100 * (9/20)
11-22 13:21:49.973: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:50.013: ERROR/(3110): LOOP ENTERED: 9 accelX to check for null: -1.771
11-22 13:21:50.143: DEBUG/rapi(3110): Successful request
11-22 13:21:50.143: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:50.143: INFO/(3110): 100 * (10/20)
11-22 13:21:50.154: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:50.174: ERROR/(3110): LOOP ENTERED: 10 accelX to check for null: 12.326
11-22 13:21:50.304: DEBUG/rapi(3110): Successful request
11-22 13:21:50.304: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:50.304: INFO/(3110): 100 * (11/20)
11-22 13:21:50.304: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:50.324: ERROR/(3110): LOOP ENTERED: 11 accelX to check for null: -1.553
11-22 13:21:50.434: DEBUG/rapi(3110): Successful request
11-22 13:21:50.434: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:50.444: INFO/(3110): 100 * (12/20)
11-22 13:21:50.444: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:50.474: ERROR/(3110): LOOP ENTERED: 12 accelX to check for null: 3.895
11-22 13:21:50.584: DEBUG/dalvikvm(3110): GC_FOR_MALLOC freed 7642 objects / 590016 bytes in 95ms
11-22 13:21:50.684: DEBUG/rapi(3110): Successful request
11-22 13:21:50.684: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:50.694: INFO/(3110): 100 * (13/20)
11-22 13:21:50.694: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:50.704: ERROR/(3110): LOOP ENTERED: 13 accelX to check for null: 3.895
11-22 13:21:50.814: DEBUG/rapi(3110): Successful request
11-22 13:21:50.814: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:50.824: INFO/(3110): 100 * (14/20)
11-22 13:21:50.824: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:50.844: ERROR/(3110): LOOP ENTERED: 14 accelX to check for null: 6.320
11-22 13:21:51.033: DEBUG/rapi(3110): Successful request
11-22 13:21:51.033: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:51.033: INFO/(3110): 100 * (15/20)
11-22 13:21:51.033: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:51.064: ERROR/(3110): LOOP ENTERED: 15 accelX to check for null: -3.868
11-22 13:21:51.164: DEBUG/rapi(3110): Successful request
11-22 13:21:51.164: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:51.164: INFO/(3110): 100 * (16/20)
11-22 13:21:51.164: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:51.194: ERROR/(3110): LOOP ENTERED: 16 accelX to check for null: -9.820
11-22 13:21:51.304: DEBUG/rapi(3110): Successful request
11-22 13:21:51.304: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:51.314: INFO/(3110): 100 * (17/20)
11-22 13:21:51.314: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:51.324: ERROR/(3110): LOOP ENTERED: 17 accelX to check for null: -5.530
11-22 13:21:51.454: DEBUG/rapi(3110): Successful request
11-22 13:21:51.454: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:51.464: INFO/(3110): 100 * (18/20)
11-22 13:21:51.464: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:51.474: ERROR/(3110): LOOP ENTERED: 18 accelX to check for null: -2.601
11-22 13:21:51.583: DEBUG/rapi(3110): Successful request
11-22 13:21:51.583: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:51.583: INFO/(3110): 100 * (19/20)
11-22 13:21:51.594: INFO/(3110): 0 <- int cast original double -> 0.0
11-22 13:21:51.614: ERROR/(3110): LOOP ENTERED: 19 accelX to check for null: -6.020
11-22 13:21:52.043: DEBUG/dalvikvm(767): GC_EXPLICIT freed 347 objects / 19880 bytes in 129ms
11-22 13:21:52.054: DEBUG/rapi(3110): Successful request
11-22 13:21:52.054: INFO/global(3110): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
11-22 13:21:52.054: INFO/(3110): 100 * (20/20)
11-22 13:21:52.054: INFO/(3110): 100 <- int cast original double -> 100.0
11-22 13:21:52.354: WARN/IInputConnectionWrapper(3110): finishComposingText on inactive InputConnection
Вы можете видеть, что это говорит о том, что partialProg
всегда равно 0, что я предполагаю, потому что это умножает некоторое десятичное число <1 на 100. Но этодвойной!Зачем это делать?Я даже пытался типизировать его во многих местах в два раза - без разных результатов. </p>
Есть идеи, что здесь происходит?