Существует простой способ отображения некоторых данных через каждые 10 секунд.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
ActionStartsHere();
}
public void ActionStartsHere() {
againStartGPSAndSendFile();
}
public void againStartGPSAndSendFile() {
new CountDownTimer(11000,10000) {
@Override
public void onTick(long millisUntilFinished) {
// Display Data by Every Ten Second
}
@Override
public void onFinish() {
ActionStartsHere();
}
}.start();
}
Нет, не знаете. Однако ваше выражение почти наверняка не выполняет то, что вы хотите.
Выражения 1/12 и 3/12 будут выполняться с использованием целочисленной арифметики.
Вероятно, вы захотите:
double result = a - b + 1/12d + 3/12d;
] или
double result = a - b + 1/(double) 12 + 3/(double) 12;
Оба они заставят выполнять деление с использованием арифметики с плавающей запятой.
Проблема здесь в том, что если оба операнда арифметического оператора являются целыми числами, тогда операция выполняется с использованием целочисленной арифметики, даже если это часть более крупного выражения типа double
. Здесь ваше выражение эффективно:
double result = a - b + (1 / 12) + (3 / 12);
Сложение и вычитание - это нормально, потому что типы a
и b
заставляют их выполняться с использованием арифметики с плавающей запятой - но потому что деление " связывает более плотно " чем сложение и вычитание (то есть это похоже на использование скобок выше), учитываются только непосредственные операнды.
Имеет ли это смысл?
РЕДАКТИРОВАТЬ: Поскольку это так популярно, имеет смысл включить сюда комментарий devinb:
double result = a - b + 1.0/12.0 + 3.0/12.0;
] Что касается компилятора, то все то же самое - вам просто нужно решить, что для вас яснее:
(double) 1
1.0
1d
Конечно, есть чистый способ сделать это без преобразования:
double result = a - b + 1.0/12 + 3.0/12;
Это действительно зависит от того, что вы спрашиваете о кастинге. Вот два разных случая:
double a = 32.34;
double b = 234.24;
double result1 = a - b + 1/12 + 3/12;
double result2 = a - b + (double)1/12 + (double)3/12;
Console.WriteLine(result1); // Result: -201.9
Console.WriteLine(result2); // Result: -201.566666666667
В любом случае вы не получите никаких жалоб на присвоение значения результату, но в первом случае деление в конце выполняется с использованием целых чисел, которые разрешаются в 0.
Хм - Я сделал это для решения проблемы целочисленного деления, выполнив что-то вроде:
double result = a - b + 1/12.0 + 3/12.0
Кроме этого, приведение типов не потребуется.
Приведение используется, чтобы указать, когда вы хотите изменить один тип данных на другой тип. Это связано с тем, что изменение типа
обычно влечет за собой возможную потерю данных.
например,
double a = 8.49374;
//casting is needed because the datatypes are different.
// a_int will end up with the value is 8, because the precision is lost.
int a_int = (int) a;
double b = (double) a_int;
В этом примере 'b' будет иметь значение «8.00000 ...», потому что a_int не содержит НИКАКОЙ десятичной информации, поэтому b имеет в своем распоряжении только целочисленную информацию.
Нет, не знаешь. Однако ваше выражение почти наверняка не выполняет то, что вы хотите.
Выражения 1/12 и 3/12 будут выполняться с использованием целочисленной арифметики.
Вероятно, вы захотите:
double result = a - b + 1/12d + 3/12d;
] или
double result = a - b + 1/(double) 12 + 3/(double) 12;
Оба они заставят выполнять деление с использованием арифметики с плавающей запятой.
Проблема здесь в том, что если оба операнда арифметического оператора являются целыми числами, тогда операция выполняется с использованием целочисленной арифметики, даже если это часть более крупного выражения типа double
. Вот ваше выражение:
double result = a - b + (1 / 12) + (3 / 12);
Сложение и вычитание - это нормально, потому что типы a
и b
заставляют их выполняться с использованием арифметики с плавающей запятой - но потому что деление " связывает более плотно "
При выполнении математических вычислений C # возвращает результат как тип любого аргумента, имеющего больший тип.
Насколько я помню, порядок выглядит примерно так (от наибольшего к наименьшему):
Конечно, это пропускает беззнаковые версии каждого из этих .
Как правило, преобразование не требуется, но в вашем примере 1/12
и 3/12
являются целочисленным делением, в результате чего 0 для каждое выражение. Вам нужно будет преобразовать один из числителя или знаменателя в double
.