如何近似?

时间:2010-06-10 13:30:02

标签: java math

如何以下列方式编写一个近似于double的函数,返回一个int:

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

7 个答案:

答案 0 :(得分:4)

这是家庭作业吗? 因为有一个库函数来执行此操作:Math.round()

如果你真的试图自己实现一些接近这个的东西,那么一种方法是采用double并将其显式地转换为int。

对于正数的情况,这基本上会截断它(例如,5.99变为5.00)。

现在您可以将其重新加倍,并从原始数字中扣除。这将为您留下0到0.99之间的数字......

将其与0.50进行比较,并决定是向上舍入还是向下舍入。如果向下舍入,请取截头数,否则截取+ 1。

答案 1 :(得分:2)

怎么样:

Math.round

你可能会遇到溢出问题,将double转换为int - 由于这个原因,这实际上会返回long。

答案 2 :(得分:2)

答案 3 :(得分:2)

public int homeworkFunction(double x) {
 return (int)(Math.signum(x) * Math.min(Math.round(Math.abs(x)) , Integer.MAX_VALUE);
}

答案 4 :(得分:1)

我从未使用过Java,但我100%确定有一个Round或Math.Round函数用于此目的!

答案 5 :(得分:1)

如果没有Math.round(),您可以使用

public long homeworkFunction(double x) {  
    return (long)(x > 0 ? x + 0.5 : x - 0.5));
}

答案 6 :(得分:1)

一块蛋糕,伙计:

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;
}