/* RoundingModes.java
Purpose:
Description:
History:
Fri May 4 12:24:48 2007, Created by tomyeh
Copyright (C) 2007 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.math;
import java.math.BigDecimal;
/**
* Utilities to handle the rounding mode.
* @author tomyeh
*/
public class RoundingModes {
private RoundingModes() {}
/** Returns the name of the rounding mode.
* Possible values include
<dl>
<dt>CEILING</dt>
<dd>Rounding mode to round towards positive infinity.</dd>
<dt>DOWN</dt>
<dd>Rounding mode to round towards zero.</dd>
<dt>FLOOR</dt>
<dd>Rounding mode to round towards negative infinity.</dd>
<dt>HALF_DOWN</dt>
<dd>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down.</dd>
<dt>HALF_EVEN</dt>
<dd>Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.</dd>
<dt>HALF_UP</dt>
<dd>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.</dd>
<dt>UNNECESSARY</dt>
<dd>Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.</dd>
<dt>UP</dt>
<dd>Rounding mode to round away from zero.</dd>
</dl>
*/
public static final String toString(int roundingMode) {
switch (roundingMode) {
case BigDecimal.ROUND_CEILING: return "CEILING";
case BigDecimal.ROUND_DOWN: return "DOWN";
case BigDecimal.ROUND_FLOOR: return "FLOOR";
case BigDecimal.ROUND_HALF_DOWN: return "HALF_DOWN";
case BigDecimal.ROUND_HALF_EVEN: return "HALF_EVEN";
case BigDecimal.ROUND_HALF_UP: return "HALF_UP";
case BigDecimal.ROUND_UNNECESSARY: return "UNNECESSARY";
case BigDecimal.ROUND_UP: return "UP";
default:
throw new IllegalArgumentException("Unknown rounding mode: "+roundingMode);
}
}
/** Returns the rounding mode of the specified name.
*
* @param name the rounding mode's name. Allowed values include:
<dl>
<dt>CEILING</dt>
<dd>Rounding mode to round towards positive infinity.</dd>
<dt>DOWN</dt>
<dd>Rounding mode to round towards zero.</dd>
<dt>FLOOR</dt>
<dd>Rounding mode to round towards negative infinity.</dd>
<dt>HALF_DOWN</dt>
<dd>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down.</dd>
<dt>HALF_EVEN</dt>
<dd>Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.</dd>
<dt>HALF_UP</dt>
<dd>Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.</dd>
<dt>UNNECESSARY</dt>
<dd>Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.</dd>
<dt>UP</dt>
<dd>Rounding mode to round away from zero.</dd>
</dl>
*/
public static final int valueOf(String name) {
name = name.toUpperCase();
if ("CEILING".equals(name)) return BigDecimal.ROUND_CEILING;
if ("DOWN".equals(name)) return BigDecimal.ROUND_DOWN;
if ("FLOOR".equals(name)) return BigDecimal.ROUND_FLOOR;
if ("HALF_DOWN".equals(name)) return BigDecimal.ROUND_HALF_DOWN;
if ("HALF_EVEN".equals(name)) return BigDecimal.ROUND_HALF_EVEN;
if ("HALF_UP".equals(name)) return BigDecimal.ROUND_HALF_UP;
if ("UNNECESSARY".equals(name)) return BigDecimal.ROUND_UNNECESSARY;
if ("UP".equals(name)) return BigDecimal.ROUND_UP;
throw new IllegalArgumentException("Unknown rounding mode: "+name);
}
}