Использование intent.setType("message/rfc822");
работает, но показывает дополнительные приложения, которые не обязательно обрабатывают электронную почту (например, GDrive). Лучше всего использовать Intent.ACTION_SENDTO
с setType("text/plain")
, но вы должны добавить setData(Uri.parse("mailto:"))
, чтобы получить наилучшие результаты (только приложения электронной почты). Полный код выглядит следующим образом:
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:IT@RMAsoft.NET"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));
Math.ceil ()
всегда будет округлять вверх, однако вы делаете целочисленное деление с 3/2
. Таким образом, поскольку при целочисленном делении 3/2 = 1
(не 1,5
) потолок 1
составляет 1
.
What вам нужно сделать, чтобы получить желаемый результат: Math.ceil (3 / 2.0);
Делением на двойную величину ( 2.0
), вы в конечном итоге выполняете деление с плавающей запятой вместо целочисленного деления. Таким образом, 3 / 2.0 = 1,5
, а ceil ()
из 1,5
всегда равно 2
.
Многие языки так «думают». Если вы делите int на int, вы должны получить int (чтобы они усекались, и в результате вы получали 1).
Мы все знаем, что это неправда, но они работают именно так. Вы можете «обмануть» их и сделать что-то вроде преобразования одного из них в двойное, или использовать двойное представление: Math.ceil (3.0 / 2)
или Math.ceil ((double) 3/2)
, как уже упоминалось.
if (a % b == 0)
{
return (a / b);
}
else
{
return (a / b) + 1;
}
Использует целочисленное деление, чтобы делать то, что вы хотите. Я не знаю математической функции, которая бы это делала, но почему бы не попробовать свою?
Разве это не обычный случай целочисленного деления? Попробуйте Math.Ceil после преобразования любого числа в тип с плавающей запятой.
В Java 3/2 = 1, поскольку используется целочисленное деление. Нет функции, которая могла бы "исправить" это впоследствии. Что вам нужно сделать, так это принудительно выполнить деление с плавающей запятой и округлить результат:
int result = (int)Math.ceil( ((float)3) / ((float)2) );
Чтобы преобразовать разделение этажа в разделение потолка:
(numerator + denominator-1) / denominator
Чтобы преобразовать разделение этажа в разделение с округлением:
(numerator + (denominator)/2) / denominator
Вы всегда можете использовать первым:
Math.ceil((double)3/2)
Немного черной магии, и все это можно сделать с помощью целых чисел:
// Divide x by n rounding up
int res = (x+n-1)/n
Math.ceil поможет , если вы используете числа с плавающей запятой. Проблема в том, что 3/2 при целочисленном делении равно 1. К тому времени, когда значение попадет в любую функцию, будь то Math.ceil или что-то еще, значение будет просто 1. Любая конечная десятичная часть исчезнет.