Для приведения двойного к целому числу и его округления до ближайшего целого числа (то есть в отличие от типичных (int)(1.8)
и (int)(1.2)
, которые оба "округляют вниз" в направлении 0 и возвращают 1
), просто добавьте 0,5 к double
, который вы будете типизировать к int
.
Например, если у нас есть
double a = 1.2;
double b = 1.8;
Тогда последующие выражения типов для x и y будут возвращать округленные значения (x = 1
и y = 1
):
int x = (int)(a); // This equals (int)(1.2) --> 1
int y = (int)(b); // This equals (int)(1.8) --> 1
Но, добавив 0,5 к каждому, мы получим округленный до ближайшего целого результат , который мы можем желать в некоторых случаях (x = 1
и y = 2
):
int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2
В качестве небольшой заметки этот метод также позволяет вам контролировать порог , при котором double
округляется в большую или меньшую сторону при типизации (int)
.
(int)(a + 0.8);
к типу. Это округляется только до (int)a + 1
всякий раз, когда десятичные значения больше или равны 0,2. То есть, добавив 0,8 к double
непосредственно перед типизацией, 10,15 и 10,03 будут округлены до 10 при (int)
типизации, но 10,23 и 10,7 будут округлены до 11.