Kri*_*ris 21
我不相信标准库有这样的功能.
问题是你要求的行为是非常不同的(数学上讲)取决于数字是大于还是小于0(即向上舍入为负值,向下舍入为正值)
可以使用以下方法:
public double myRound(double val) {
if (val < 0) {
return Math.ceil(val);
}
return Math.floor(val);
}
Run Code Online (Sandbox Code Playgroud)
像这样长得像:
float x= 1.9;
long y = (long)x;
Run Code Online (Sandbox Code Playgroud)
这使得正数和负数都朝向零.
使用RoundingMode.DOWN,它导致零.
示例:
BigDecimal value = new BigDecimal("1.4");
value = value.setScale(0, RoundingMode.DOWN);
System.out.println(value.doubleValue());
BigDecimal value1 = new BigDecimal("-1.4");
value1 = value1.setScale(0, RoundingMode.DOWN);
System.out.println(value1.doubleValue());
Run Code Online (Sandbox Code Playgroud)
只需转换为int就能为你做到这一点?
编辑:如果你想保留一个双倍,这应该足够简单:
if (val < 0)
return -Math.floor(-val);
else
return Math.floor(val);
Run Code Online (Sandbox Code Playgroud)
对于那些想要分支免费代码并且感觉更聪明的人来说:
long tmp = Double.doubleToLongBits(val);
tmp >>>= 63;
return Math.floor(val) + tmp;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8690 次 |
| 最近记录: |