Package ru.gentoos.ehouse.util
Class Rounding
java.lang.Object
ru.gentoos.ehouse.util.Rounding
Округление с семантикой 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 TypeMethodDescriptionstatic doublepythonRound(double value, int digits) round(value, digits)из Python: half-even на точном бинарном значении.static longtruncate(double value) int(value)из Python: усечение дробной части к нулю.
-
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).
-