numberformat.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 607 行 · 第 1/2 页
JAVA
607 行
*
* @param locale The desired locale.
*
* @return An instance of the default <code>NumberFormat</code> class.
*/
public static final NumberFormat getNumberInstance ()
{
return getNumberInstance (Locale.getDefault());
}
/**
* This method returns a general purpose number formatting and parsing
* class for the default locale. This will be a concrete subclass of
* <code>NumberFormat</code>, but the actual class returned is dependent
* on the locale.
*
* @return An instance of a generic number formatter for the default locale.
*/
public static NumberFormat getNumberInstance (Locale loc)
{
return computeInstance (loc, "numberFormat", "#,##0.###");
}
/**
* This method returns an instance of <code>NumberFormat</code> suitable
* for formatting and parsing percentage values in the default locale.
*
* @return An instance of <code>NumberFormat</code> for handling percentages.
*/
public static final NumberFormat getPercentInstance ()
{
return getPercentInstance (Locale.getDefault());
}
/**
* This method returns an instance of <code>NumberFormat</code> suitable
* for formatting and parsing percentage values in the specified locale.
*
* @param locale The desired locale.
*
* @return An instance of <code>NumberFormat</code> for handling percentages.
*/
public static NumberFormat getPercentInstance (Locale loc)
{
return computeInstance (loc, "percentFormat", "#,##0%");
}
/**
* This method returns a hash value for this object.
*
* @return The hash code.
*/
public int hashCode ()
{
int hash = super.hashCode();
hash ^= (maximumFractionDigits + maximumIntegerDigits
+ minimumFractionDigits + minimumIntegerDigits);
if (groupingUsed)
hash ^= 0xf0f0;
if (parseIntegerOnly)
hash ^= 0x0f0f;
return hash;
}
/**
* This method tests whether or not grouping is in use. Grouping is
* a method of marking separations in numbers, such as thousand separators
* in the US English locale. The grouping positions and symbols are all
* locale specific. As an example, with grouping disabled, the number one
* million would appear as "1000000". With grouping enabled, this number
* might appear as "1,000,000". (Both of these assume the US English
* locale).
*
* @return <code>true</code> if grouping is enabled,
* <code>false</code> otherwise.
*/
public boolean isGroupingUsed ()
{
return groupingUsed;
}
/**
* This method tests whether or not only integer values should be parsed.
* If this class is parsing only integers, parsing stops at the decimal
* point.
*
* @return <code>true</code> if only integers are parsed,
* <code>false</code> otherwise.
*/
public boolean isParseIntegerOnly ()
{
return parseIntegerOnly;
}
/**
* This is a default constructor for use by subclasses.
*/
public NumberFormat ()
{
}
/**
* This method parses the specified string into a <code>Number</code>. This
* will be a <code>Long</code> if possible, otherwise it will be a
* <code>Double</code>. If no number can be parsed, no exception is
* thrown. Instead, the parse position remains at its initial index.
*
* @param str The string to parse.
* @param pp The desired <code>ParsePosition</code>.
*
* @return The parsed <code>Number</code>
*/
public abstract Number parse (String sourceStr, ParsePosition pos);
/**
* This method parses the specified string into a <code>Number</code>. This
* will be a <code>Long</code> if possible, otherwise it will be a
* <code>Double</code>. If no number can be parsed, an exception will be
* thrown.
*
* @param str The string to parse.
*
* @return The parsed <code>Number</code>
*
* @exception ParseException If no number can be parsed.
*/
public Number parse (String sourceStr) throws ParseException
{
ParsePosition pp = new ParsePosition (0);
Number r = parse (sourceStr, pp);
if (r == null)
{
int index = pp.getErrorIndex();
if (index < 0)
index = pp.getIndex();
throw new ParseException ("couldn't parse number", index);
}
return r;
}
/**
* This method parses the specified string into an <code>Object</code>. This
* will be a <code>Long</code> if possible, otherwise it will be a
* <code>Double</code>. If no number can be parsed, no exception is
* thrown. Instead, the parse position remains at its initial index.
*
* @param str The string to parse.
* @param pp The desired <code>ParsePosition</code>.
*
* @return The parsed <code>Object</code>
*/
public final Object parseObject (String sourceStr, ParsePosition pos)
{
return parse (sourceStr, pos);
}
/**
* This method sets the grouping behavior of this formatter. Grouping is
* a method of marking separations in numbers, such as thousand separators
* in the US English locale. The grouping positions and symbols are all
* locale specific. As an example, with grouping disabled, the number one
* million would appear as "1000000". With grouping enabled, this number
* might appear as "1,000,000". (Both of these assume the US English
* locale).
*
* @param groupingUsed <code>true</code> to enable grouping,
* <code>false</code> to disable it.
*/
public void setGroupingUsed (boolean newValue)
{
groupingUsed = newValue;
}
/**
* This method sets the maximum number of digits allowed in the fraction
* portion of a number to the specified value. If this is less than the
* current minimum allowed digits, the minimum allowed digits value will
* be lowered to be equal to the new maximum allowed digits value.
*
* @param maximumFractionDigits The new maximum fraction digits value.
*/
public void setMaximumFractionDigits (int newValue)
{
maximumFractionDigits = newValue;
if (getMinimumFractionDigits () > maximumFractionDigits)
setMinimumFractionDigits (maximumFractionDigits);
}
/**
* This method sets the maximum number of digits allowed in the integer
* portion of a number to the specified value. If this is less than the
* current minimum allowed digits, the minimum allowed digits value will
* be lowered to be equal to the new maximum allowed digits value.
*
* @param maximumIntegerDigits The new maximum integer digits value.
*/
public void setMaximumIntegerDigits (int newValue)
{
maximumIntegerDigits = newValue;
if (getMinimumIntegerDigits () > maximumIntegerDigits)
setMinimumIntegerDigits (maximumIntegerDigits);
}
/**
* This method sets the minimum number of digits allowed in the fraction
* portion of a number to the specified value. If this is greater than the
* current maximum allowed digits, the maximum allowed digits value will
* be raised to be equal to the new minimum allowed digits value.
*
* @param minimumFractionDigits The new minimum fraction digits value.
*/
public void setMinimumFractionDigits (int newValue)
{
minimumFractionDigits = newValue;
if (getMaximumFractionDigits () < minimumFractionDigits)
setMaximumFractionDigits (minimumFractionDigits);
}
/**
* This method sets the minimum number of digits allowed in the integer
* portion of a number to the specified value. If this is greater than the
* current maximum allowed digits, the maximum allowed digits value will
* be raised to be equal to the new minimum allowed digits value.
*
* @param minimumIntegerDigits The new minimum integer digits value.
*/
public void setMinimumIntegerDigits (int newValue)
{
minimumIntegerDigits = newValue;
if (getMaximumIntegerDigits () < minimumIntegerDigits)
setMaximumIntegerDigits (minimumIntegerDigits);
}
/**
* This method sets the parsing behavior of this object to parse only
* integers or not.
*
* @param parseIntegerOnly <code>true</code> to parse only integers,
* <code>false</code> otherwise.
*/
public void setParseIntegerOnly (boolean value)
{
parseIntegerOnly = value;
}
/**
* This method is a specialization of the format method that performs
* a simple formatting of the specified <code>double</code> number.
*
* @param number The <code>double</code> to format.
*
* @return The formatted number
*/
public final String format (double number)
{
StringBuffer sbuf = new StringBuffer(50);
format (number, sbuf, null);
return sbuf.toString();
}
// These field names are fixed by the serialization spec.
boolean groupingUsed;
int maximumFractionDigits;
private byte maxFractionDigits;
int maximumIntegerDigits;
private byte maxIntegerDigits;
int minimumFractionDigits;
private byte minFractionDigits;
int minimumIntegerDigits;
private byte minIntegerDigits;
boolean parseIntegerOnly;
private int serialVersionOnStream;
private static final long serialVersionUID = -2308460125733713944L;
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException
{
stream.defaultReadObject();
if (serialVersionOnStream < 1)
{
maximumFractionDigits = maxFractionDigits;
maximumIntegerDigits = maxIntegerDigits;
minimumFractionDigits = minFractionDigits;
minimumIntegerDigits = minIntegerDigits;
serialVersionOnStream = 1;
}
}
private void writeObject(ObjectOutputStream stream) throws IOException
{
maxFractionDigits = maximumFractionDigits < Byte.MAX_VALUE ?
(byte) maximumFractionDigits : Byte.MAX_VALUE;
maxIntegerDigits = maximumIntegerDigits < Byte.MAX_VALUE ?
(byte) maximumIntegerDigits : Byte.MAX_VALUE;
minFractionDigits = minimumFractionDigits < Byte.MAX_VALUE ?
(byte) minimumFractionDigits : Byte.MAX_VALUE;
minIntegerDigits = minimumIntegerDigits < Byte.MAX_VALUE ?
(byte) minimumIntegerDigits : Byte.MAX_VALUE;
serialVersionOnStream = 1;
stream.defaultWriteObject();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?