在java中向零舍入

Rad*_*dek 16 java

如何在java中向零舍入?

因此-1.9变为-1.0,-0.2变为0.0,3.4变为3.0,依此类推.

是否Math.round()能够做到这改变某些参数的?

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)


con*_*ius 9

像这样长得像:

float x= 1.9;

long y = (long)x;
Run Code Online (Sandbox Code Playgroud)

这使得正数和负数都朝向零.

  • 如果结果适合`int`,这可能是一个很大的if (2认同)
  • 为什么要转换为 `int` 并将其存储在 `long` 中?投射到`long`。 (2认同)
  • **-1:**在浮点数太大或太小而无法用64位整数表示的情况下,这将失败。无论是int还是long,问题都只会转移。这样的数字在日常使用中可能并不常见-但这只会使查找与上溢/下溢相关的错误更加困难。 (2认同)

mpr*_*hat 6

使用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)

  • @mprabhat`BigDecimal`不是'**表示Java中数字的方式'.它是几个中的一个. (2认同)

Voo*_*Voo 5

只需转换为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)

  • 如果结果适合`int`,这可能是一个很大的if. (3认同)