Class Rounding

java.lang.Object
ru.gentoos.ehouse.util.Rounding

public final class Rounding extends Object
Округление с семантикой Python (паритет с Python-оригиналом e-house).

Различаются ДВА поведения, которые в Python-коде взаимозаменяемы только по внешнему виду:

  • truncate(double) — int(float): усечение к нулю (используется ThresholdMonitorAssistant._round при rounding == 0);
  • pythonRound(double, int) — round(x, digits): округление «к ближайшему, при равенстве — к чётному» (banker's rounding, half-even) на точном бинарном значении x — так работает встроенный round() в Python 3.

pythonRound обязан строиться от new BigDecimal(double) (точное двоичное значение), а не BigDecimal.valueOf (кратчайшая десятичная запись): для 2.675 они дают разные результаты (2.68 против 2.67), и Python соответствует первому. Math.round() не подходит вовсе — он всегда round-half-up.

  • Method Summary

    Modifier and Type
    Method
    Description
    static double
    pythonRound(double value, int digits)
    round(value, digits) из Python: half-even на точном бинарном значении.
    static long
    truncate(double value)
    int(value) из Python: усечение дробной части к нулю.

    Methods inherited from class java.lang.Object

    equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • truncate

      public static long truncate(double value)
      int(value) из Python: усечение дробной части к нулю.
    • pythonRound

      public static double pythonRound(double value, int digits)
      round(value, digits) из Python: half-even на точном бинарном значении. Для digits == 0 возвращает целое как double (в Python это float, например round(21.6) == 22.0).