【发布时间】:2011-03-02 04:25:13
【问题描述】:
我如何编写一个以以下方式逼近 double 的函数,并返回一个 int:
function (2.3) -> 2
function (2.7) -> 3
function (-1.2) -> -1
function (-1.7) -> -2
【问题讨论】:
我如何编写一个以以下方式逼近 double 的函数,并返回一个 int:
function (2.3) -> 2
function (2.7) -> 3
function (-1.2) -> -1
function (-1.7) -> -2
【问题讨论】:
怎么样:
Math.round
将 double 转换为 int 可能会出现溢出问题 - 因此实际上返回 long。
【讨论】:
我从未使用过 Java,但我 100% 确定有一个 Round 或 Math.Round 函数可用于此!
【讨论】:
这是作业吗? 因为有一个库函数可以做到这一点:Math.round()
如果您实际上是在尝试自己实现与此类似的东西,一种方法是采用双精度并将其显式转换为 int。
对于正数,这实际上会截断它(例如,5.99 变为 5.00)。
现在您可以将其转换回双倍,并从您的原始数字中扣除。这会让你得到一个介于 0 和 0.99 之间的数字......
将其与 0.50 进行比较,然后决定是向上取整还是向下取整。如果向下取整,取截断的数字,否则取截断的 + 1。
【讨论】:
truncate(x + .5)。如果原始数字的小数部分
System.out.println((int)(-1.7 + 0.5)) 打印的是 -1,而不是 -2。
x 的符号并相应地进行调整,就像Uri 在他的帖子中提到的那样——For the case of positive numbers, ...。
您可以为此使用Math.round 方法,请参阅https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Math.html。
【讨论】:
public int homeworkFunction(double x) {
return (int)(Math.signum(x) * Math.min(Math.round(Math.abs(x)) , Integer.MAX_VALUE);
}
【讨论】:
没有 Math.round(),你可以使用
public long homeworkFunction(double x) {
return (long)(x > 0 ? x + 0.5 : x - 0.5));
}
【讨论】:
小菜一碟,伙计:
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;
}
【讨论】: