Как делают меня вокруг плавания до ближайшего интервала в C#?

В Android вы должны использовать методы журнала, которые хорошо работают с программой просмотра журнала Logcat, используемой Android.

} catch (IOException e) {
   Log.e("YOUR ERROR TAG HERE", "Copying failed", e);
}

Используя метод Log.e, который принимает в качестве аргумента метод throwable, вы убедитесь, что класс журнала возьмет трассировку стека и правильно зарегистрирует ее в Logcat. Если вы используете e.printStackTrace, для этого будут использоваться общие методы ведения журнала Java, и он не будет отображаться правильно в Logcat, а в некоторых случаях будет невозможно дважды щелкнуть имя класса в logcat, чтобы перейти к классу и методу, упомянутым в StackTrace.

Печать Stacktrace для деления на ноль будет выглядеть следующим образом:

11-21 20:55:47.360: W/System.err(989): java.lang.ArithmeticException: divide by zero
11-21 20:55:47.379: W/System.err(989):  at test.tabs.TabChooser.onCreate(TabChooser.java:15)
11-21 20:55:47.390: W/System.err(989):  at android.app.Activity.performCreate(Activity.java:4465)
11-21 20:55:47.410: W/System.err(989):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-21 20:55:47.410: W/System.err(989):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
11-21 20:55:47.420: W/System.err(989):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
11-21 20:55:47.420: W/System.err(989):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
11-21 20:55:47.420: W/System.err(989):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
11-21 20:55:47.420: W/System.err(989):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-21 20:55:47.420: W/System.err(989):  at android.os.Looper.loop(Looper.java:137)
11-21 20:55:47.420: W/System.err(989):  at android.app.ActivityThread.main(ActivityThread.java:4340)
11-21 20:55:47.430: W/System.err(989):  at java.lang.reflect.Method.invokeNative(Native Method)
11-21 20:55:47.430: W/System.err(989):  at java.lang.reflect.Method.invoke(Method.java:511)
11-21 20:55:47.430: W/System.err(989):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-21 20:55:47.430: W/System.err(989):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-21 20:55:47.430: W/System.err(989):  at dalvik.system.NativeStart.main(Native Method)

Исключение регистрируется как предупреждение, и тег журнала не очень полезен.

Правильная регистрация деления на ноль будет выглядеть следующим образом:

11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): Copying failed
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356): java.lang.ArithmeticException: divide by zero
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at test.tabs.TabChooser.onCreate(TabChooser.java:16)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.Activity.performCreate(Activity.java:4465)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.ActivityThread.access$600(ActivityThread.java:122)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.os.Looper.loop(Looper.java:137)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at android.app.ActivityThread.main(ActivityThread.java:4340)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at java.lang.reflect.Method.invokeNative(Native Method)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at java.lang.reflect.Method.invoke(Method.java:511)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-21 21:03:32.480: E/YOUR ERROR TAG HERE(1356):    at dalvik.system.NativeStart.main(Native Method)

Исключение правильно регистрируется как ошибка с вашим тегом журнала и сообщением журнала.

54
задан 24 May 2009 в 13:14
поделиться

6 ответов

Если вы хотите округлить до ближайшего int:

int rounded = (int)Math.Round(precise, 0);

Вы также можете использовать:

int rounded = Convert.ToInt32(precise);

Что будет использовать Math.Round (x, 0 ); округлить и отлить за вас. Это выглядит аккуратнее, но немного менее понятно, IMO.


Если вы хотите округлить до :

int roundedUp = (int)Math.Ceiling(precise);
125
ответ дан 7 November 2019 в 07:45
поделиться

Внезапно:

float fl = 0.678;
int rounded_f = (int)(fl+0.5f);
13
ответ дан 7 November 2019 в 07:45
поделиться

Самый простой - просто добавить к нему 0.5f , а затем преобразовать его в int.

2
ответ дан 7 November 2019 в 07:45
поделиться

(int) Math.Round (myNumber, 0)

3
ответ дан 7 November 2019 в 07:45
поделиться

Вы можете привести к типу int, если уверены, что оно находится в диапазоне для int (от Int32.MinValue до Int32.MaxValue).

0
ответ дан 7 November 2019 в 07:45
поделиться

Могу ли я использовать один из них, а затем преобразовать его в Int?

Да. Это не проблема. Десятичные и двойные числа могут точно представлять целые числа, поэтому ошибки представления не будет. (Например, вы не получите случай, когда Round вернет 4,999 ... вместо 5.)

1
ответ дан 7 November 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: