舍入双重价值观

时间:2011-06-29 06:25:22

标签: java

舍入问题

例如

  1. 598.59 ya 591.45将被转换为600。
  2. 541.0将转换为550。
  3. 541.59将被转换为550。

    只需检查最后2位数即可忽略 十进制值。如果最后2位数 在11-19之间,它将转换20如果 21-29然后将转换30,依此类推..

  4. 那我该怎么办? 需要你的帮助。

    提前感谢....

6 个答案:

答案 0 :(得分:4)

我只是猜测你的意思,但假设你要舍入到最接近的n,你可以做以下事。

double d = Math.round(d / n) * n;

e.g。如果n = 50

double d = Math.round(d / 50) * 50;

答案 1 :(得分:2)

使用 MathUtils [ Commons Math ]:
- static double round(double x, int scale)
- static double round(double x, int scale, int roundingMethod)

MathUtils.round(598.59, -1); // 600.0
MathUtils.round(591.45, -1, BigDecimal.ROUND_CEILING); // 600.0
MathUtils.round(541.0, -1, BigDecimal.ROUND_CEILING); // 550.0
MathUtils.round(541.59, -1, BigDecimal.ROUND_CEILING); // 550.0

有关更新

  

只需检查最后2位数即可忽略   十进制值。如果最后2位数   在11-19之间,它将转换20如果   然后21-29将转换为30左右   上..

MathUtils.round((double) 111, -1, BigDecimal.ROUND_UP); // 120.0
MathUtils.round((double) 119, -1, BigDecimal.ROUND_UP); // 120.0
MathUtils.round((double) 121, -1, BigDecimal.ROUND_UP); // 130.0
MathUtils.round((double) 129, -1, BigDecimal.ROUND_UP); // 130.0

使用“加倍”以确保使用round(double x, ...),而不是round(float x, ...)

答案 2 :(得分:1)

好的,所以你可以使用Math类。像这样:

Math.floor(myNumber); //541.59 -> 541, returns double

但在这种情况下,您必须定义舍入的“限制”。这是为了什么目的?

答案 3 :(得分:1)

例如

public class RoundToTwodecimalPlaces {

    public static double roundTo2Places(double value) {
        assert value >= Long.MIN_VALUE / 100 && value <= Long.MAX_VALUE / 100;
        long digits = (long) (value < 0 ? value * 100 - 0.5 : value * 100 + 0.5);
        return (double) digits / 100;
    }

    private RoundToTwodecimalPlaces() {
    }
}

答案 4 :(得分:1)

598.59 ya 591.45 to be convert 600.
541.0 to be convert 550.
541.59 to be convert 550.

至于我:     1.除以10

59.859
54.10
54.159

2。舍入到最接近的不小于整数和3.乘以10。 收到     600     550     550

答案 5 :(得分:0)

公共类RoundToTwodecimalPlaces {

public static double roundTo2Places(double value) {
    assert value >= Long.MIN_VALUE / 100 && value <= Long.MAX_VALUE / 100;
    long digits = (long) (value < 0 ? value * 100 - 0.5 : value * 100 + 0.5);
    return (double) digits / 100;
}

private RoundToTwodecimalPlaces() {
}

}