如何以下列方式编写一个近似于double的函数,返回一个int:
function (2.3) -> 2
function (2.7) -> 3
function (-1.2) -> -1
function (-1.7) -> -2
答案 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;
}