Есть ли любая функция Java или util класс, который делает округление этого пути: func (3/2) = 2?

Использование 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"));
17
задан Jonas 5 August 2011 в 09:39
поделиться

10 ответов

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 .

52
ответ дан 30 November 2019 в 09:56
поделиться

Вы пробовали Math.floor () ?

-2
ответ дан 30 November 2019 в 09:56
поделиться

Многие языки так «думают». Если вы делите int на int, вы должны получить int (чтобы они усекались, и в результате вы получали 1).

Мы все знаем, что это неправда, но они работают именно так. Вы можете «обмануть» их и сделать что-то вроде преобразования одного из них в двойное, или использовать двойное представление: Math.ceil (3.0 / 2) или Math.ceil ((double) 3/2) , как уже упоминалось.

3
ответ дан 30 November 2019 в 09:56
поделиться
if (a % b == 0)
{
  return (a / b);
}
else
{
  return (a / b) + 1;
}

Использует целочисленное деление, чтобы делать то, что вы хотите. Я не знаю математической функции, которая бы это делала, но почему бы не попробовать свою?

1
ответ дан 30 November 2019 в 09:56
поделиться

Разве это не обычный случай целочисленного деления? Попробуйте Math.Ceil после преобразования любого числа в тип с плавающей запятой.

4
ответ дан 30 November 2019 в 09:56
поделиться

В Java 3/2 = 1, поскольку используется целочисленное деление. Нет функции, которая могла бы "исправить" это впоследствии. Что вам нужно сделать, так это принудительно выполнить деление с плавающей запятой и округлить результат:

int result = (int)Math.ceil( ((float)3) / ((float)2) );
5
ответ дан 30 November 2019 в 09:56
поделиться

Чтобы преобразовать разделение этажа в разделение потолка:

(numerator + denominator-1) / denominator

Чтобы преобразовать разделение этажа в разделение с округлением:

(numerator + (denominator)/2) / denominator
12
ответ дан 30 November 2019 в 09:56
поделиться

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

Math.ceil((double)3/2)
11
ответ дан 30 November 2019 в 09:56
поделиться

Немного черной магии, и все это можно сделать с помощью целых чисел:

// Divide x by n rounding up
int res = (x+n-1)/n
42
ответ дан 30 November 2019 в 09:56
поделиться

Math.ceil поможет , если вы используете числа с плавающей запятой. Проблема в том, что 3/2 при целочисленном делении равно 1. К тому времени, когда значение попадет в любую функцию, будь то Math.ceil или что-то еще, значение будет просто 1. Любая конечная десятичная часть исчезнет.

2
ответ дан 30 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

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