mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-13 08:53:20 +00:00
initial checkin
X-SVN-Rev: 1031
This commit is contained in:
parent
08016523ee
commit
15fa18bc56
4 changed files with 9878 additions and 0 deletions
4357
icu4j/src/com/ibm/icu/math/BigDecimal.java
Executable file
4357
icu4j/src/com/ibm/icu/math/BigDecimal.java
Executable file
File diff suppressed because it is too large
Load diff
582
icu4j/src/com/ibm/icu/math/MathContext.java
Executable file
582
icu4j/src/com/ibm/icu/math/MathContext.java
Executable file
|
@ -0,0 +1,582 @@
|
|||
/* Generated from 'MathContext.nrx' 27 Mar 2000 22:37:33 [v1.162] */
|
||||
/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
|
||||
package com.ibm.math;
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* MathContext -- Math context settings */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Copyright IBM Corporation, 1997, 2000. All Rights Reserved. */
|
||||
/* */
|
||||
/* The MathContext object encapsulates the settings used by the */
|
||||
/* BigDecimal class; it could also be used by other arithmetics. */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Notes: */
|
||||
/* */
|
||||
/* 1. The properties are checked for validity on construction, so */
|
||||
/* the BigDecimal class may assume that they are correct. */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Author: Mike Cowlishaw */
|
||||
/* 1997.09.03 Initial version (edited from netrexx.lang.RexxSet) */
|
||||
/* 1997.09.12 Add lostDigits property */
|
||||
/* 1998.05.02 Make the class immutable and final; drop set methods */
|
||||
/* 1998.06.05 Add Round (rounding modes) property */
|
||||
/* 1998.06.25 Rename from DecimalContext; allow digits=0 */
|
||||
/* 1998.10.12 change to com.ibm.math package */
|
||||
/* 1999.02.06 add javadoc comments */
|
||||
/* 1999.03.05 simplify; changes from discussion with J. Bloch */
|
||||
/* 1999.03.13 1.00 release to IBM Centre for Java Technology */
|
||||
/* 1999.07.10 1.04 flag serialization unused */
|
||||
/* 2000.01.01 1.06 copyright update */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The <code>MathContext</code> immutable class encapsulates the
|
||||
* settings understood by the operator methods of the {@link BigDecimal}
|
||||
* class (and potentially other classes). Operator methods are those
|
||||
* that effect an operation on a number or a pair of numbers.
|
||||
* <p>
|
||||
* The settings, which are not base-dependent, comprise:
|
||||
* <ol>
|
||||
* <li><code>digits</code>:
|
||||
* the number of digits (precision) to be used for an operation
|
||||
* <li><code>form</code>:
|
||||
* the form of any exponent that results from the operation
|
||||
* <li><code>lostDigits</code>:
|
||||
* whether checking for lost digits is enabled
|
||||
* <li><code>roundingMode</code>:
|
||||
* the algorithm to be used for rounding.
|
||||
* </ol>
|
||||
* <p>
|
||||
* When provided, a <code>MathContext</code> object supplies the
|
||||
* settings for an operation directly.
|
||||
* <p>
|
||||
* When <code>MathContext.DEFAULT</code> is provided for a
|
||||
* <code>MathContext</code> parameter then the default settings are used
|
||||
* (<code>9, SCIENTIFIC, false, ROUND_HALF_UP</code>).
|
||||
* <p>
|
||||
* In the <code>BigDecimal</code> class, all methods which accept a
|
||||
* <code>MathContext</code> object defaults) also have a version of the
|
||||
* method which does not accept a MathContext parameter. These versions
|
||||
* carry out unlimited precision fixed point arithmetic (as though the
|
||||
* settings were (<code>0, PLAIN, false, ROUND_HALF_UP</code>).
|
||||
* <p>
|
||||
* The instance variables are shared with default access (so they are
|
||||
* directly accessible to the <code>BigDecimal</code> class), but must
|
||||
* never be changed.
|
||||
* <p>
|
||||
* The rounding mode constants have the same names and values as the
|
||||
* constants of the same name in <code>java.math.BigDecimal</code>, to
|
||||
* maintain compatibility with earlier versions of
|
||||
* <code>BigDecimal</code>.
|
||||
*
|
||||
* @see BigDecimal
|
||||
* @version 1.06 2000.01.01
|
||||
* @author Mike Cowlishaw
|
||||
*/
|
||||
|
||||
public final class MathContext implements java.io.Serializable{
|
||||
private static final java.lang.String $0="MathContext.nrx";
|
||||
|
||||
/* ----- Properties ----- */
|
||||
/* properties public constant */
|
||||
/**
|
||||
* Plain (fixed point) notation, without any exponent.
|
||||
* Used as a setting to control the form of the result of a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* A zero result in plain form may have a decimal part of one or
|
||||
* more zeros.
|
||||
*
|
||||
* @see #ENGINEERING
|
||||
* @see #SCIENTIFIC
|
||||
*/
|
||||
public static final int PLAIN=0; // [no exponent]
|
||||
|
||||
/**
|
||||
* Standard floating point notation (with scientific exponential
|
||||
* format, where there is one digit before any decimal point).
|
||||
* Used as a setting to control the form of the result of a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* A zero result in plain form may have a decimal part of one or
|
||||
* more zeros.
|
||||
*
|
||||
* @see #ENGINEERING
|
||||
* @see #PLAIN
|
||||
*/
|
||||
public static final int SCIENTIFIC=1; // 1 digit before .
|
||||
|
||||
/**
|
||||
* Standard floating point notation (with engineering exponential
|
||||
* format, where the power of ten is a multiple of 3).
|
||||
* Used as a setting to control the form of the result of a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* A zero result in plain form may have a decimal part of one or
|
||||
* more zeros.
|
||||
*
|
||||
* @see #PLAIN
|
||||
* @see #SCIENTIFIC
|
||||
*/
|
||||
public static final int ENGINEERING=2; // 1-3 digits before .
|
||||
|
||||
// The rounding modes match the original BigDecimal class values
|
||||
/**
|
||||
* Rounding mode to round to a more positive number.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If any of the discarded digits are non-zero then the result
|
||||
* should be rounded towards the next more positive digit.
|
||||
*/
|
||||
public static final int ROUND_CEILING=2;
|
||||
|
||||
/**
|
||||
* Rounding mode to round towards zero.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* All discarded digits are ignored (truncated). The result is
|
||||
* neither incremented nor decremented.
|
||||
*/
|
||||
public static final int ROUND_DOWN=1;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to a more negative number.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If any of the discarded digits are non-zero then the result
|
||||
* should be rounded towards the next more negative digit.
|
||||
*/
|
||||
public static final int ROUND_FLOOR=3;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to nearest neighbor, where an equidistant
|
||||
* value is rounded down.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If the discarded digits represent greater than half (0.5 times)
|
||||
* the value of a one in the next position then the result should be
|
||||
* rounded up (away from zero). Otherwise the discarded digits are
|
||||
* ignored.
|
||||
*/
|
||||
public static final int ROUND_HALF_DOWN=5;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to nearest neighbor, where an equidistant
|
||||
* value is rounded to the nearest even neighbor.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If the discarded digits represent greater than half (0.5 times)
|
||||
* the value of a one in the next position then the result should be
|
||||
* rounded up (away from zero). If they represent less than half,
|
||||
* then the result should be rounded down.
|
||||
* <p>
|
||||
* Otherwise (they represent exactly half) the result is rounded
|
||||
* down if its rightmost digit is even, or rounded up if its
|
||||
* rightmost digit is odd (to make an even digit).
|
||||
*/
|
||||
public static final int ROUND_HALF_EVEN=6;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to nearest neighbor, where an equidistant
|
||||
* value is rounded up.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If the discarded digits represent greater than or equal to half
|
||||
* (0.5 times) the value of a one in the next position then the result
|
||||
* should be rounded up (away from zero). Otherwise the discarded
|
||||
* digits are ignored.
|
||||
*/
|
||||
public static final int ROUND_HALF_UP=4;
|
||||
|
||||
/**
|
||||
* Rounding mode to assert that no rounding is necessary.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* Rounding (potential loss of information) is not permitted.
|
||||
* If any of the discarded digits are non-zero then an
|
||||
* <code>ArithmeticException</code> should be thrown.
|
||||
*/
|
||||
public static final int ROUND_UNNECESSARY=7;
|
||||
|
||||
/**
|
||||
* Rounding mode to round away from zero.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If any of the discarded digits are non-zero then the result will
|
||||
* be rounded up (away from zero).
|
||||
*/
|
||||
public static final int ROUND_UP=0;
|
||||
|
||||
|
||||
/* properties shared */
|
||||
/**
|
||||
* The number of digits (precision) to be used for an operation.
|
||||
* A value of 0 indicates that unlimited precision (as many digits
|
||||
* as are required) will be used.
|
||||
* <p>
|
||||
* The {@link BigDecimal} operator methods use this value to
|
||||
* determine the precision of results.
|
||||
* Note that leading zeros (in the integer part of a number) are
|
||||
* never significant.
|
||||
* <p>
|
||||
* <code>digits</code> will always be non-negative.
|
||||
*
|
||||
* @serial
|
||||
*/
|
||||
int digits;
|
||||
|
||||
/**
|
||||
* The form of results from an operation.
|
||||
* <p>
|
||||
* The {@link BigDecimal} operator methods use this value to
|
||||
* determine the form of results, in particular whether and how
|
||||
* exponential notation should be used.
|
||||
*
|
||||
* @see #ENGINEERING
|
||||
* @see #PLAIN
|
||||
* @see #SCIENTIFIC
|
||||
* @serial
|
||||
*/
|
||||
int form; // values for this must fit in a byte
|
||||
|
||||
/**
|
||||
* Controls whether lost digits checking is enabled for an
|
||||
* operation.
|
||||
* Set to <code>true</code> to enable checking, or
|
||||
* to <code>false</code> to disable checking.
|
||||
* <p>
|
||||
* When enabled, the {@link BigDecimal} operator methods check
|
||||
* the precision of their operand or operands, and throw an
|
||||
* <code>ArithmeticException</code> if an operand is more precise
|
||||
* than the digits setting (that is, digits would be lost).
|
||||
* When disabled, operands are rounded to the specified digits.
|
||||
*
|
||||
* @serial
|
||||
*/
|
||||
boolean lostDigits;
|
||||
|
||||
/**
|
||||
* The rounding algorithm to be used for an operation.
|
||||
* <p>
|
||||
* The {@link BigDecimal} operator methods use this value to
|
||||
* determine the algorithm to be used when non-zero digits have to
|
||||
* be discarded in order to reduce the precision of a result.
|
||||
* The value must be one of the public constants whose name starts
|
||||
* with <code>ROUND_</code>.
|
||||
*
|
||||
* @see #ROUND_CEILING
|
||||
* @see #ROUND_DOWN
|
||||
* @see #ROUND_FLOOR
|
||||
* @see #ROUND_HALF_DOWN
|
||||
* @see #ROUND_HALF_EVEN
|
||||
* @see #ROUND_HALF_UP
|
||||
* @see #ROUND_UNNECESSARY
|
||||
* @see #ROUND_UP
|
||||
* @serial
|
||||
*/
|
||||
int roundingMode;
|
||||
|
||||
/* properties private constant */
|
||||
// default settings
|
||||
private static final int DEFAULT_FORM=SCIENTIFIC;
|
||||
private static final int DEFAULT_DIGITS=9;
|
||||
private static final boolean DEFAULT_LOSTDIGITS=false;
|
||||
private static final int DEFAULT_ROUNDINGMODE=ROUND_HALF_UP;
|
||||
|
||||
/* properties private constant */
|
||||
|
||||
private static final int MIN_DIGITS=0; // smallest value for DIGITS.
|
||||
private static final int MAX_DIGITS=999999999; // largest value for DIGITS. If increased,
|
||||
// the BigDecimal class may need update.
|
||||
// list of valid rounding mode values, most common two first
|
||||
private static final int ROUNDS[]=new int[]{ROUND_HALF_UP,ROUND_UNNECESSARY,ROUND_CEILING,ROUND_DOWN,ROUND_FLOOR,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UP};
|
||||
|
||||
|
||||
private static final java.lang.String ROUNDWORDS[]=new java.lang.String[]{"ROUND_HALF_UP","ROUND_UNNECESSARY","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_UP"}; // matching names of the ROUNDS values
|
||||
|
||||
|
||||
|
||||
|
||||
/* properties private constant unused */
|
||||
|
||||
// Serialization version
|
||||
private static final long serialVersionUID=7163376998892515376L;
|
||||
|
||||
/* properties public constant */
|
||||
/**
|
||||
* A <code>MathContext</code> object initialized to the default
|
||||
* settings for general-purpose arithmetic. That is,
|
||||
* <code>digits=9 form=SCIENTIFIC lostDigits=false
|
||||
* roundingMode=ROUND_HALF_UP</code>.
|
||||
*
|
||||
* @see #SCIENTIFIC
|
||||
* @see #ROUND_HALF_UP
|
||||
*/
|
||||
public static final com.ibm.math.MathContext DEFAULT=new com.ibm.math.MathContext(DEFAULT_DIGITS,DEFAULT_FORM,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
|
||||
|
||||
|
||||
|
||||
|
||||
/* ----- Constructors ----- */
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision.
|
||||
* The other settings are set to the default values
|
||||
* (see {@link #DEFAULT}).
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999).
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits){
|
||||
this(setdigits,DEFAULT_FORM,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
|
||||
return;}
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision and form.
|
||||
* The other settings are set to the default values
|
||||
* (see {@link #DEFAULT}).
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999), or if the value given for the
|
||||
* <code>setform</code> parameter is not one of the appropriate
|
||||
* constants.
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setform The <code>int</code> form setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits,int setform){
|
||||
this(setdigits,setform,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
|
||||
return;}
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision, form, and lostDigits setting.
|
||||
* The roundingMode setting is set to its default value
|
||||
* (see {@link #DEFAULT}).
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999), or if the value given for the
|
||||
* <code>setform</code> parameter is not one of the appropriate
|
||||
* constants.
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setform The <code>int</code> form setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setlostdigits The <code>boolean</code> lostDigits
|
||||
* setting for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits,int setform,boolean setlostdigits){
|
||||
this(setdigits,setform,setlostdigits,DEFAULT_ROUNDINGMODE);
|
||||
return;}
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision, form, lostDigits, and roundingMode setting.
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999), or if the value given for the
|
||||
* <code>setform</code> or <code>setroundingmode</code> parameters is
|
||||
* not one of the appropriate constants.
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setform The <code>int</code> form setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setlostdigits The <code>boolean</code> lostDigits
|
||||
* setting for this <code>MathContext</code>.
|
||||
* @param setroundingmode The <code>int</code> roundingMode setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits,int setform,boolean setlostdigits,int setroundingmode){super();
|
||||
|
||||
|
||||
// set values, after checking
|
||||
if (setdigits!=DEFAULT_DIGITS)
|
||||
{
|
||||
if (setdigits<MIN_DIGITS)
|
||||
throw new java.lang.IllegalArgumentException("Digits too small:"+" "+setdigits);
|
||||
if (setdigits>MAX_DIGITS)
|
||||
throw new java.lang.IllegalArgumentException("Digits too large:"+" "+setdigits);
|
||||
}
|
||||
{/*select*/
|
||||
if (setform==SCIENTIFIC)
|
||||
; // [most common]
|
||||
else if (setform==ENGINEERING)
|
||||
;
|
||||
else if (setform==PLAIN)
|
||||
;
|
||||
else{
|
||||
throw new java.lang.IllegalArgumentException("Bad form value:"+" "+setform);
|
||||
}
|
||||
}
|
||||
if ((!(isValidRound(setroundingmode))))
|
||||
throw new java.lang.IllegalArgumentException("Bad roundingMode value:"+" "+setroundingmode);
|
||||
digits=setdigits;
|
||||
form=setform;
|
||||
lostDigits=setlostdigits; // [no bad value possible]
|
||||
roundingMode=setroundingmode;
|
||||
return;}
|
||||
|
||||
/**
|
||||
* Returns the digits setting.
|
||||
* This value is always non-negative.
|
||||
*
|
||||
* @return an <code>int</code> which is the value of the digits
|
||||
* setting
|
||||
*/
|
||||
|
||||
public int getDigits(){
|
||||
return digits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the form setting.
|
||||
* This will be one of
|
||||
* {@link #ENGINEERING},
|
||||
* {@link #PLAIN}, or
|
||||
* {@link #SCIENTIFIC}.
|
||||
*
|
||||
* @return an <code>int</code> which is the value of the form setting
|
||||
*/
|
||||
|
||||
public int getForm(){
|
||||
return form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the lostDigits setting.
|
||||
* This will be either <code>true</code> (enabled) or
|
||||
* <code>false</code> (disabled).
|
||||
*
|
||||
* @return a <code>boolean</code> which is the value of the lostDigits
|
||||
* setting
|
||||
*/
|
||||
|
||||
public boolean getLostDigits(){
|
||||
return lostDigits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the roundingMode setting.
|
||||
* This will be one of
|
||||
* {@link #ROUND_CEILING},
|
||||
* {@link #ROUND_DOWN},
|
||||
* {@link #ROUND_FLOOR},
|
||||
* {@link #ROUND_HALF_DOWN},
|
||||
* {@link #ROUND_HALF_EVEN},
|
||||
* {@link #ROUND_HALF_UP},
|
||||
* {@link #ROUND_UNNECESSARY}, or
|
||||
* {@link #ROUND_UP}.
|
||||
*
|
||||
* @return an <code>int</code> which is the value of the roundingMode
|
||||
* setting
|
||||
*/
|
||||
|
||||
public int getRoundingMode(){
|
||||
return roundingMode;
|
||||
}
|
||||
|
||||
/** Returns the <code>MathContext</code> as a readable string.
|
||||
* The <code>String</code> returned represents the settings of the
|
||||
* <code>MathContext</code> object as four blank-delimited words
|
||||
* separated by a single blank and with no leading or trailing blanks,
|
||||
* as follows:
|
||||
* <ol>
|
||||
* <li>
|
||||
* <code>digits=</code>, immediately followed by
|
||||
* the value of the digits setting as a numeric word.
|
||||
* <li>
|
||||
* <code>form=</code>, immediately followed by
|
||||
* the value of the form setting as an uppercase word
|
||||
* (one of <code>SCIENTIFIC</code>, <code>PLAIN</code>, or
|
||||
* <code>ENGINEERING</code>).
|
||||
* <li>
|
||||
* <code>lostDigits=</code>, immediately followed by
|
||||
* the value of the lostDigits setting
|
||||
* (<code>1</code> if enabled, <code>0</code> if disabled).
|
||||
* <li>
|
||||
* <code>roundingMode=</code>, immediately followed by
|
||||
* the value of the roundingMode setting as a word.
|
||||
* This word will be the same as the name of the corresponding public
|
||||
* constant.
|
||||
* </ol>
|
||||
* <p>
|
||||
* For example:
|
||||
* <br><code>
|
||||
* digits=9 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP
|
||||
* </code>
|
||||
* <p>
|
||||
* Additional words may be appended to the result of
|
||||
* <code>toString</code> in the future if more properties are added
|
||||
* to the class.
|
||||
*
|
||||
* @return a <code>String</code> representing the context settings.
|
||||
*/
|
||||
|
||||
public java.lang.String toString(){
|
||||
java.lang.String formstr=null;
|
||||
int r=0;
|
||||
java.lang.String roundword=null;
|
||||
{/*select*/
|
||||
if (form==SCIENTIFIC)
|
||||
formstr="SCIENTIFIC";
|
||||
else if (form==ENGINEERING)
|
||||
formstr="ENGINEERING";
|
||||
else{
|
||||
formstr="PLAIN";/* form=PLAIN */
|
||||
}
|
||||
}
|
||||
{int $1=ROUNDS.length;r=0;r:for(;$1>0;$1--,r++){
|
||||
if (roundingMode==ROUNDS[r])
|
||||
{
|
||||
roundword=ROUNDWORDS[r];
|
||||
break r;
|
||||
}
|
||||
}
|
||||
}/*r*/
|
||||
return "digits="+digits+" "+"form="+formstr+" "+"lostDigits="+(lostDigits?"1":"0")+" "+"roundingMode="+roundword;
|
||||
}
|
||||
|
||||
|
||||
/* <sgml> Test whether round is valid. </sgml> */
|
||||
// This could be made shared for use by BigDecimal for setScale.
|
||||
|
||||
private static boolean isValidRound(int testround){
|
||||
int r=0;
|
||||
{int $2=ROUNDS.length;r=0;r:for(;$2>0;$2--,r++){
|
||||
if (testround==ROUNDS[r])
|
||||
return true;
|
||||
}
|
||||
}/*r*/
|
||||
return false;
|
||||
}
|
||||
}
|
4357
icu4j/src/com/ibm/math/BigDecimal.java
Executable file
4357
icu4j/src/com/ibm/math/BigDecimal.java
Executable file
File diff suppressed because it is too large
Load diff
582
icu4j/src/com/ibm/math/MathContext.java
Executable file
582
icu4j/src/com/ibm/math/MathContext.java
Executable file
|
@ -0,0 +1,582 @@
|
|||
/* Generated from 'MathContext.nrx' 27 Mar 2000 22:37:33 [v1.162] */
|
||||
/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
|
||||
package com.ibm.math;
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* MathContext -- Math context settings */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Copyright IBM Corporation, 1997, 2000. All Rights Reserved. */
|
||||
/* */
|
||||
/* The MathContext object encapsulates the settings used by the */
|
||||
/* BigDecimal class; it could also be used by other arithmetics. */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Notes: */
|
||||
/* */
|
||||
/* 1. The properties are checked for validity on construction, so */
|
||||
/* the BigDecimal class may assume that they are correct. */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Author: Mike Cowlishaw */
|
||||
/* 1997.09.03 Initial version (edited from netrexx.lang.RexxSet) */
|
||||
/* 1997.09.12 Add lostDigits property */
|
||||
/* 1998.05.02 Make the class immutable and final; drop set methods */
|
||||
/* 1998.06.05 Add Round (rounding modes) property */
|
||||
/* 1998.06.25 Rename from DecimalContext; allow digits=0 */
|
||||
/* 1998.10.12 change to com.ibm.math package */
|
||||
/* 1999.02.06 add javadoc comments */
|
||||
/* 1999.03.05 simplify; changes from discussion with J. Bloch */
|
||||
/* 1999.03.13 1.00 release to IBM Centre for Java Technology */
|
||||
/* 1999.07.10 1.04 flag serialization unused */
|
||||
/* 2000.01.01 1.06 copyright update */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The <code>MathContext</code> immutable class encapsulates the
|
||||
* settings understood by the operator methods of the {@link BigDecimal}
|
||||
* class (and potentially other classes). Operator methods are those
|
||||
* that effect an operation on a number or a pair of numbers.
|
||||
* <p>
|
||||
* The settings, which are not base-dependent, comprise:
|
||||
* <ol>
|
||||
* <li><code>digits</code>:
|
||||
* the number of digits (precision) to be used for an operation
|
||||
* <li><code>form</code>:
|
||||
* the form of any exponent that results from the operation
|
||||
* <li><code>lostDigits</code>:
|
||||
* whether checking for lost digits is enabled
|
||||
* <li><code>roundingMode</code>:
|
||||
* the algorithm to be used for rounding.
|
||||
* </ol>
|
||||
* <p>
|
||||
* When provided, a <code>MathContext</code> object supplies the
|
||||
* settings for an operation directly.
|
||||
* <p>
|
||||
* When <code>MathContext.DEFAULT</code> is provided for a
|
||||
* <code>MathContext</code> parameter then the default settings are used
|
||||
* (<code>9, SCIENTIFIC, false, ROUND_HALF_UP</code>).
|
||||
* <p>
|
||||
* In the <code>BigDecimal</code> class, all methods which accept a
|
||||
* <code>MathContext</code> object defaults) also have a version of the
|
||||
* method which does not accept a MathContext parameter. These versions
|
||||
* carry out unlimited precision fixed point arithmetic (as though the
|
||||
* settings were (<code>0, PLAIN, false, ROUND_HALF_UP</code>).
|
||||
* <p>
|
||||
* The instance variables are shared with default access (so they are
|
||||
* directly accessible to the <code>BigDecimal</code> class), but must
|
||||
* never be changed.
|
||||
* <p>
|
||||
* The rounding mode constants have the same names and values as the
|
||||
* constants of the same name in <code>java.math.BigDecimal</code>, to
|
||||
* maintain compatibility with earlier versions of
|
||||
* <code>BigDecimal</code>.
|
||||
*
|
||||
* @see BigDecimal
|
||||
* @version 1.06 2000.01.01
|
||||
* @author Mike Cowlishaw
|
||||
*/
|
||||
|
||||
public final class MathContext implements java.io.Serializable{
|
||||
private static final java.lang.String $0="MathContext.nrx";
|
||||
|
||||
/* ----- Properties ----- */
|
||||
/* properties public constant */
|
||||
/**
|
||||
* Plain (fixed point) notation, without any exponent.
|
||||
* Used as a setting to control the form of the result of a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* A zero result in plain form may have a decimal part of one or
|
||||
* more zeros.
|
||||
*
|
||||
* @see #ENGINEERING
|
||||
* @see #SCIENTIFIC
|
||||
*/
|
||||
public static final int PLAIN=0; // [no exponent]
|
||||
|
||||
/**
|
||||
* Standard floating point notation (with scientific exponential
|
||||
* format, where there is one digit before any decimal point).
|
||||
* Used as a setting to control the form of the result of a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* A zero result in plain form may have a decimal part of one or
|
||||
* more zeros.
|
||||
*
|
||||
* @see #ENGINEERING
|
||||
* @see #PLAIN
|
||||
*/
|
||||
public static final int SCIENTIFIC=1; // 1 digit before .
|
||||
|
||||
/**
|
||||
* Standard floating point notation (with engineering exponential
|
||||
* format, where the power of ten is a multiple of 3).
|
||||
* Used as a setting to control the form of the result of a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* A zero result in plain form may have a decimal part of one or
|
||||
* more zeros.
|
||||
*
|
||||
* @see #PLAIN
|
||||
* @see #SCIENTIFIC
|
||||
*/
|
||||
public static final int ENGINEERING=2; // 1-3 digits before .
|
||||
|
||||
// The rounding modes match the original BigDecimal class values
|
||||
/**
|
||||
* Rounding mode to round to a more positive number.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If any of the discarded digits are non-zero then the result
|
||||
* should be rounded towards the next more positive digit.
|
||||
*/
|
||||
public static final int ROUND_CEILING=2;
|
||||
|
||||
/**
|
||||
* Rounding mode to round towards zero.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* All discarded digits are ignored (truncated). The result is
|
||||
* neither incremented nor decremented.
|
||||
*/
|
||||
public static final int ROUND_DOWN=1;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to a more negative number.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If any of the discarded digits are non-zero then the result
|
||||
* should be rounded towards the next more negative digit.
|
||||
*/
|
||||
public static final int ROUND_FLOOR=3;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to nearest neighbor, where an equidistant
|
||||
* value is rounded down.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If the discarded digits represent greater than half (0.5 times)
|
||||
* the value of a one in the next position then the result should be
|
||||
* rounded up (away from zero). Otherwise the discarded digits are
|
||||
* ignored.
|
||||
*/
|
||||
public static final int ROUND_HALF_DOWN=5;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to nearest neighbor, where an equidistant
|
||||
* value is rounded to the nearest even neighbor.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If the discarded digits represent greater than half (0.5 times)
|
||||
* the value of a one in the next position then the result should be
|
||||
* rounded up (away from zero). If they represent less than half,
|
||||
* then the result should be rounded down.
|
||||
* <p>
|
||||
* Otherwise (they represent exactly half) the result is rounded
|
||||
* down if its rightmost digit is even, or rounded up if its
|
||||
* rightmost digit is odd (to make an even digit).
|
||||
*/
|
||||
public static final int ROUND_HALF_EVEN=6;
|
||||
|
||||
/**
|
||||
* Rounding mode to round to nearest neighbor, where an equidistant
|
||||
* value is rounded up.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If the discarded digits represent greater than or equal to half
|
||||
* (0.5 times) the value of a one in the next position then the result
|
||||
* should be rounded up (away from zero). Otherwise the discarded
|
||||
* digits are ignored.
|
||||
*/
|
||||
public static final int ROUND_HALF_UP=4;
|
||||
|
||||
/**
|
||||
* Rounding mode to assert that no rounding is necessary.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* Rounding (potential loss of information) is not permitted.
|
||||
* If any of the discarded digits are non-zero then an
|
||||
* <code>ArithmeticException</code> should be thrown.
|
||||
*/
|
||||
public static final int ROUND_UNNECESSARY=7;
|
||||
|
||||
/**
|
||||
* Rounding mode to round away from zero.
|
||||
* Used as a setting to control the rounding mode used during a
|
||||
* <code>BigDecimal</code> operation.
|
||||
* <p>
|
||||
* If any of the discarded digits are non-zero then the result will
|
||||
* be rounded up (away from zero).
|
||||
*/
|
||||
public static final int ROUND_UP=0;
|
||||
|
||||
|
||||
/* properties shared */
|
||||
/**
|
||||
* The number of digits (precision) to be used for an operation.
|
||||
* A value of 0 indicates that unlimited precision (as many digits
|
||||
* as are required) will be used.
|
||||
* <p>
|
||||
* The {@link BigDecimal} operator methods use this value to
|
||||
* determine the precision of results.
|
||||
* Note that leading zeros (in the integer part of a number) are
|
||||
* never significant.
|
||||
* <p>
|
||||
* <code>digits</code> will always be non-negative.
|
||||
*
|
||||
* @serial
|
||||
*/
|
||||
int digits;
|
||||
|
||||
/**
|
||||
* The form of results from an operation.
|
||||
* <p>
|
||||
* The {@link BigDecimal} operator methods use this value to
|
||||
* determine the form of results, in particular whether and how
|
||||
* exponential notation should be used.
|
||||
*
|
||||
* @see #ENGINEERING
|
||||
* @see #PLAIN
|
||||
* @see #SCIENTIFIC
|
||||
* @serial
|
||||
*/
|
||||
int form; // values for this must fit in a byte
|
||||
|
||||
/**
|
||||
* Controls whether lost digits checking is enabled for an
|
||||
* operation.
|
||||
* Set to <code>true</code> to enable checking, or
|
||||
* to <code>false</code> to disable checking.
|
||||
* <p>
|
||||
* When enabled, the {@link BigDecimal} operator methods check
|
||||
* the precision of their operand or operands, and throw an
|
||||
* <code>ArithmeticException</code> if an operand is more precise
|
||||
* than the digits setting (that is, digits would be lost).
|
||||
* When disabled, operands are rounded to the specified digits.
|
||||
*
|
||||
* @serial
|
||||
*/
|
||||
boolean lostDigits;
|
||||
|
||||
/**
|
||||
* The rounding algorithm to be used for an operation.
|
||||
* <p>
|
||||
* The {@link BigDecimal} operator methods use this value to
|
||||
* determine the algorithm to be used when non-zero digits have to
|
||||
* be discarded in order to reduce the precision of a result.
|
||||
* The value must be one of the public constants whose name starts
|
||||
* with <code>ROUND_</code>.
|
||||
*
|
||||
* @see #ROUND_CEILING
|
||||
* @see #ROUND_DOWN
|
||||
* @see #ROUND_FLOOR
|
||||
* @see #ROUND_HALF_DOWN
|
||||
* @see #ROUND_HALF_EVEN
|
||||
* @see #ROUND_HALF_UP
|
||||
* @see #ROUND_UNNECESSARY
|
||||
* @see #ROUND_UP
|
||||
* @serial
|
||||
*/
|
||||
int roundingMode;
|
||||
|
||||
/* properties private constant */
|
||||
// default settings
|
||||
private static final int DEFAULT_FORM=SCIENTIFIC;
|
||||
private static final int DEFAULT_DIGITS=9;
|
||||
private static final boolean DEFAULT_LOSTDIGITS=false;
|
||||
private static final int DEFAULT_ROUNDINGMODE=ROUND_HALF_UP;
|
||||
|
||||
/* properties private constant */
|
||||
|
||||
private static final int MIN_DIGITS=0; // smallest value for DIGITS.
|
||||
private static final int MAX_DIGITS=999999999; // largest value for DIGITS. If increased,
|
||||
// the BigDecimal class may need update.
|
||||
// list of valid rounding mode values, most common two first
|
||||
private static final int ROUNDS[]=new int[]{ROUND_HALF_UP,ROUND_UNNECESSARY,ROUND_CEILING,ROUND_DOWN,ROUND_FLOOR,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_UP};
|
||||
|
||||
|
||||
private static final java.lang.String ROUNDWORDS[]=new java.lang.String[]{"ROUND_HALF_UP","ROUND_UNNECESSARY","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_UP"}; // matching names of the ROUNDS values
|
||||
|
||||
|
||||
|
||||
|
||||
/* properties private constant unused */
|
||||
|
||||
// Serialization version
|
||||
private static final long serialVersionUID=7163376998892515376L;
|
||||
|
||||
/* properties public constant */
|
||||
/**
|
||||
* A <code>MathContext</code> object initialized to the default
|
||||
* settings for general-purpose arithmetic. That is,
|
||||
* <code>digits=9 form=SCIENTIFIC lostDigits=false
|
||||
* roundingMode=ROUND_HALF_UP</code>.
|
||||
*
|
||||
* @see #SCIENTIFIC
|
||||
* @see #ROUND_HALF_UP
|
||||
*/
|
||||
public static final com.ibm.math.MathContext DEFAULT=new com.ibm.math.MathContext(DEFAULT_DIGITS,DEFAULT_FORM,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
|
||||
|
||||
|
||||
|
||||
|
||||
/* ----- Constructors ----- */
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision.
|
||||
* The other settings are set to the default values
|
||||
* (see {@link #DEFAULT}).
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999).
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits){
|
||||
this(setdigits,DEFAULT_FORM,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
|
||||
return;}
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision and form.
|
||||
* The other settings are set to the default values
|
||||
* (see {@link #DEFAULT}).
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999), or if the value given for the
|
||||
* <code>setform</code> parameter is not one of the appropriate
|
||||
* constants.
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setform The <code>int</code> form setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits,int setform){
|
||||
this(setdigits,setform,DEFAULT_LOSTDIGITS,DEFAULT_ROUNDINGMODE);
|
||||
return;}
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision, form, and lostDigits setting.
|
||||
* The roundingMode setting is set to its default value
|
||||
* (see {@link #DEFAULT}).
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999), or if the value given for the
|
||||
* <code>setform</code> parameter is not one of the appropriate
|
||||
* constants.
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setform The <code>int</code> form setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setlostdigits The <code>boolean</code> lostDigits
|
||||
* setting for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits,int setform,boolean setlostdigits){
|
||||
this(setdigits,setform,setlostdigits,DEFAULT_ROUNDINGMODE);
|
||||
return;}
|
||||
|
||||
/**
|
||||
* Constructs a new <code>MathContext</code> with a specified
|
||||
* precision, form, lostDigits, and roundingMode setting.
|
||||
*
|
||||
* An <code>IllegalArgumentException</code> is thrown if the
|
||||
* <code>setdigits</code> parameter is out of range
|
||||
* (<0 or >999999999), or if the value given for the
|
||||
* <code>setform</code> or <code>setroundingmode</code> parameters is
|
||||
* not one of the appropriate constants.
|
||||
*
|
||||
* @param setdigits The <code>int</code> digits setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setform The <code>int</code> form setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @param setlostdigits The <code>boolean</code> lostDigits
|
||||
* setting for this <code>MathContext</code>.
|
||||
* @param setroundingmode The <code>int</code> roundingMode setting
|
||||
* for this <code>MathContext</code>.
|
||||
* @throws IllegalArgumentException parameter out of range.
|
||||
*/
|
||||
|
||||
public MathContext(int setdigits,int setform,boolean setlostdigits,int setroundingmode){super();
|
||||
|
||||
|
||||
// set values, after checking
|
||||
if (setdigits!=DEFAULT_DIGITS)
|
||||
{
|
||||
if (setdigits<MIN_DIGITS)
|
||||
throw new java.lang.IllegalArgumentException("Digits too small:"+" "+setdigits);
|
||||
if (setdigits>MAX_DIGITS)
|
||||
throw new java.lang.IllegalArgumentException("Digits too large:"+" "+setdigits);
|
||||
}
|
||||
{/*select*/
|
||||
if (setform==SCIENTIFIC)
|
||||
; // [most common]
|
||||
else if (setform==ENGINEERING)
|
||||
;
|
||||
else if (setform==PLAIN)
|
||||
;
|
||||
else{
|
||||
throw new java.lang.IllegalArgumentException("Bad form value:"+" "+setform);
|
||||
}
|
||||
}
|
||||
if ((!(isValidRound(setroundingmode))))
|
||||
throw new java.lang.IllegalArgumentException("Bad roundingMode value:"+" "+setroundingmode);
|
||||
digits=setdigits;
|
||||
form=setform;
|
||||
lostDigits=setlostdigits; // [no bad value possible]
|
||||
roundingMode=setroundingmode;
|
||||
return;}
|
||||
|
||||
/**
|
||||
* Returns the digits setting.
|
||||
* This value is always non-negative.
|
||||
*
|
||||
* @return an <code>int</code> which is the value of the digits
|
||||
* setting
|
||||
*/
|
||||
|
||||
public int getDigits(){
|
||||
return digits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the form setting.
|
||||
* This will be one of
|
||||
* {@link #ENGINEERING},
|
||||
* {@link #PLAIN}, or
|
||||
* {@link #SCIENTIFIC}.
|
||||
*
|
||||
* @return an <code>int</code> which is the value of the form setting
|
||||
*/
|
||||
|
||||
public int getForm(){
|
||||
return form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the lostDigits setting.
|
||||
* This will be either <code>true</code> (enabled) or
|
||||
* <code>false</code> (disabled).
|
||||
*
|
||||
* @return a <code>boolean</code> which is the value of the lostDigits
|
||||
* setting
|
||||
*/
|
||||
|
||||
public boolean getLostDigits(){
|
||||
return lostDigits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the roundingMode setting.
|
||||
* This will be one of
|
||||
* {@link #ROUND_CEILING},
|
||||
* {@link #ROUND_DOWN},
|
||||
* {@link #ROUND_FLOOR},
|
||||
* {@link #ROUND_HALF_DOWN},
|
||||
* {@link #ROUND_HALF_EVEN},
|
||||
* {@link #ROUND_HALF_UP},
|
||||
* {@link #ROUND_UNNECESSARY}, or
|
||||
* {@link #ROUND_UP}.
|
||||
*
|
||||
* @return an <code>int</code> which is the value of the roundingMode
|
||||
* setting
|
||||
*/
|
||||
|
||||
public int getRoundingMode(){
|
||||
return roundingMode;
|
||||
}
|
||||
|
||||
/** Returns the <code>MathContext</code> as a readable string.
|
||||
* The <code>String</code> returned represents the settings of the
|
||||
* <code>MathContext</code> object as four blank-delimited words
|
||||
* separated by a single blank and with no leading or trailing blanks,
|
||||
* as follows:
|
||||
* <ol>
|
||||
* <li>
|
||||
* <code>digits=</code>, immediately followed by
|
||||
* the value of the digits setting as a numeric word.
|
||||
* <li>
|
||||
* <code>form=</code>, immediately followed by
|
||||
* the value of the form setting as an uppercase word
|
||||
* (one of <code>SCIENTIFIC</code>, <code>PLAIN</code>, or
|
||||
* <code>ENGINEERING</code>).
|
||||
* <li>
|
||||
* <code>lostDigits=</code>, immediately followed by
|
||||
* the value of the lostDigits setting
|
||||
* (<code>1</code> if enabled, <code>0</code> if disabled).
|
||||
* <li>
|
||||
* <code>roundingMode=</code>, immediately followed by
|
||||
* the value of the roundingMode setting as a word.
|
||||
* This word will be the same as the name of the corresponding public
|
||||
* constant.
|
||||
* </ol>
|
||||
* <p>
|
||||
* For example:
|
||||
* <br><code>
|
||||
* digits=9 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP
|
||||
* </code>
|
||||
* <p>
|
||||
* Additional words may be appended to the result of
|
||||
* <code>toString</code> in the future if more properties are added
|
||||
* to the class.
|
||||
*
|
||||
* @return a <code>String</code> representing the context settings.
|
||||
*/
|
||||
|
||||
public java.lang.String toString(){
|
||||
java.lang.String formstr=null;
|
||||
int r=0;
|
||||
java.lang.String roundword=null;
|
||||
{/*select*/
|
||||
if (form==SCIENTIFIC)
|
||||
formstr="SCIENTIFIC";
|
||||
else if (form==ENGINEERING)
|
||||
formstr="ENGINEERING";
|
||||
else{
|
||||
formstr="PLAIN";/* form=PLAIN */
|
||||
}
|
||||
}
|
||||
{int $1=ROUNDS.length;r=0;r:for(;$1>0;$1--,r++){
|
||||
if (roundingMode==ROUNDS[r])
|
||||
{
|
||||
roundword=ROUNDWORDS[r];
|
||||
break r;
|
||||
}
|
||||
}
|
||||
}/*r*/
|
||||
return "digits="+digits+" "+"form="+formstr+" "+"lostDigits="+(lostDigits?"1":"0")+" "+"roundingMode="+roundword;
|
||||
}
|
||||
|
||||
|
||||
/* <sgml> Test whether round is valid. </sgml> */
|
||||
// This could be made shared for use by BigDecimal for setScale.
|
||||
|
||||
private static boolean isValidRound(int testround){
|
||||
int r=0;
|
||||
{int $2=ROUNDS.length;r=0;r:for(;$2>0;$2--,r++){
|
||||
if (testround==ROUNDS[r])
|
||||
return true;
|
||||
}
|
||||
}/*r*/
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue