Как приблизить двойной? - PullRequest
0 голосов
/ 10 июня 2010

Как написать функцию, которая аппроксимирует double следующим образом, возвращая int:

function (2.3) -> 2
function (2.7) -> 3
function (-1.2) -> -1
function (-1.7) -> -2

Ответы [ 7 ]

4 голосов
/ 10 июня 2010

Это домашняя работа? Потому что для этого есть библиотечная функция: Math.round ()

Если вы на самом деле пытаетесь реализовать что-то похожее на это самостоятельно, один из способов сделать это - взять значение double и явно привести его к int.

В случае положительных чисел это, по существу, обрезает его (например, 5,99 становится 5,00).

Теперь вы можете привести его к удвоению и вычесть из своего исходного числа. Это оставит вас с числом от 0 до 0,99 ...

Сравните это с 0,50 и решите, округлять ли вверх. Если вы округлите число вниз, возьмите усеченное число, в противном случае возьмите усеченное + 1.

2 голосов
/ 10 июня 2010
public int homeworkFunction(double x) {
 return (int)(Math.signum(x) * Math.min(Math.round(Math.abs(x)) , Integer.MAX_VALUE);
}
2 голосов
/ 10 июня 2010
2 голосов
/ 10 июня 2010

Как насчет:

Math.round

Вы можете столкнуться с проблемами переполнения при преобразовании double в целое число - по этой причине это на самом деле возвращает long.

1 голос
/ 16 сентября 2010

Кусок торта, человек:

private double round(double d, int numbersAfterDecimalPoint) {
    long n = Math.pow(10, numbersAfterDecimalPoint);
    double d2 = d * n;
    long l = (long) d2;
    return ((double) l) / n;
}
1 голос
/ 10 июня 2010

Без Math.round () вы можете использовать

public long homeworkFunction(double x) {  
    return (long)(x > 0 ? x + 0.5 : x - 0.5));
}
1 голос
/ 10 июня 2010

Я никогда не использовал Java, но я на 100% уверен, что для этого есть функция Round или Math.Round!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...