/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.commons.math3.fraction;

import java.io.Serializable;
import java.text.FieldPosition;
import java.text.NumberFormat;
import java.text.ParsePosition;
import java.util.Locale;

import org.apache.commons.math3.exception.NullArgumentException;
import org.apache.commons.math3.exception.util.LocalizedFormats;

Common part shared by both FractionFormat and BigFractionFormat.
Since:2.0
/** * Common part shared by both {@link FractionFormat} and {@link BigFractionFormat}. * @since 2.0 */
public abstract class AbstractFormat extends NumberFormat implements Serializable {
Serializable version identifier.
/** Serializable version identifier. */
private static final long serialVersionUID = -6981118387974191891L;
The format used for the denominator.
/** The format used for the denominator. */
private NumberFormat denominatorFormat;
The format used for the numerator.
/** The format used for the numerator. */
private NumberFormat numeratorFormat;
Create an improper formatting instance with the default number format for the numerator and denominator.
/** * Create an improper formatting instance with the default number format * for the numerator and denominator. */
protected AbstractFormat() { this(getDefaultNumberFormat()); }
Create an improper formatting instance with a custom number format for both the numerator and denominator.
Params:
  • format – the custom format for both the numerator and denominator.
/** * Create an improper formatting instance with a custom number format for * both the numerator and denominator. * @param format the custom format for both the numerator and denominator. */
protected AbstractFormat(final NumberFormat format) { this(format, (NumberFormat) format.clone()); }
Create an improper formatting instance with a custom number format for the numerator and a custom number format for the denominator.
Params:
  • numeratorFormat – the custom format for the numerator.
  • denominatorFormat – the custom format for the denominator.
/** * Create an improper formatting instance with a custom number format for * the numerator and a custom number format for the denominator. * @param numeratorFormat the custom format for the numerator. * @param denominatorFormat the custom format for the denominator. */
protected AbstractFormat(final NumberFormat numeratorFormat, final NumberFormat denominatorFormat) { this.numeratorFormat = numeratorFormat; this.denominatorFormat = denominatorFormat; }
Create a default number format. The default number format is based on NumberFormat.getNumberInstance(Locale). The only customization is the maximum number of BigFraction digits, which is set to 0.
Returns:the default number format.
/** * Create a default number format. The default number format is based on * {@link NumberFormat#getNumberInstance(java.util.Locale)}. The only * customization is the maximum number of BigFraction digits, which is set to 0. * @return the default number format. */
protected static NumberFormat getDefaultNumberFormat() { return getDefaultNumberFormat(Locale.getDefault()); }
Create a default number format. The default number format is based on NumberFormat.getNumberInstance(Locale). The only customization is the maximum number of BigFraction digits, which is set to 0.
Params:
  • locale – the specific locale used by the format.
Returns:the default number format specific to the given locale.
/** * Create a default number format. The default number format is based on * {@link NumberFormat#getNumberInstance(java.util.Locale)}. The only * customization is the maximum number of BigFraction digits, which is set to 0. * @param locale the specific locale used by the format. * @return the default number format specific to the given locale. */
protected static NumberFormat getDefaultNumberFormat(final Locale locale) { final NumberFormat nf = NumberFormat.getNumberInstance(locale); nf.setMaximumFractionDigits(0); nf.setParseIntegerOnly(true); return nf; }
Access the denominator format.
Returns:the denominator format.
/** * Access the denominator format. * @return the denominator format. */
public NumberFormat getDenominatorFormat() { return denominatorFormat; }
Access the numerator format.
Returns:the numerator format.
/** * Access the numerator format. * @return the numerator format. */
public NumberFormat getNumeratorFormat() { return numeratorFormat; }
Modify the denominator format.
Params:
  • format – the new denominator format value.
Throws:
/** * Modify the denominator format. * @param format the new denominator format value. * @throws NullArgumentException if {@code format} is {@code null}. */
public void setDenominatorFormat(final NumberFormat format) { if (format == null) { throw new NullArgumentException(LocalizedFormats.DENOMINATOR_FORMAT); } this.denominatorFormat = format; }
Modify the numerator format.
Params:
  • format – the new numerator format value.
Throws:
/** * Modify the numerator format. * @param format the new numerator format value. * @throws NullArgumentException if {@code format} is {@code null}. */
public void setNumeratorFormat(final NumberFormat format) { if (format == null) { throw new NullArgumentException(LocalizedFormats.NUMERATOR_FORMAT); } this.numeratorFormat = format; }
Parses source until a non-whitespace character is found.
Params:
  • source – the string to parse
  • pos – input/output parsing parameter. On output, pos holds the index of the next non-whitespace character.
/** * Parses <code>source</code> until a non-whitespace character is found. * @param source the string to parse * @param pos input/output parsing parameter. On output, <code>pos</code> * holds the index of the next non-whitespace character. */
protected static void parseAndIgnoreWhitespace(final String source, final ParsePosition pos) { parseNextCharacter(source, pos); pos.setIndex(pos.getIndex() - 1); }
Parses source until a non-whitespace character is found.
Params:
  • source – the string to parse
  • pos – input/output parsing parameter.
Returns:the first non-whitespace character.
/** * Parses <code>source</code> until a non-whitespace character is found. * @param source the string to parse * @param pos input/output parsing parameter. * @return the first non-whitespace character. */
protected static char parseNextCharacter(final String source, final ParsePosition pos) { int index = pos.getIndex(); final int n = source.length(); char ret = 0; if (index < n) { char c; do { c = source.charAt(index++); } while (Character.isWhitespace(c) && index < n); pos.setIndex(index); if (index < n) { ret = c; } } return ret; }
Formats a double value as a fraction and appends the result to a StringBuffer.
Params:
  • value – the double value to format
  • buffer – StringBuffer to append to
  • position – On input: an alignment field, if desired. On output: the offsets of the alignment field
See Also:
Returns:a reference to the appended buffer
/** * Formats a double value as a fraction and appends the result to a StringBuffer. * * @param value the double value to format * @param buffer StringBuffer to append to * @param position On input: an alignment field, if desired. On output: the * offsets of the alignment field * @return a reference to the appended buffer * @see #format(Object, StringBuffer, FieldPosition) */
@Override public StringBuffer format(final double value, final StringBuffer buffer, final FieldPosition position) { return format(Double.valueOf(value), buffer, position); }
Formats a long value as a fraction and appends the result to a StringBuffer.
Params:
  • value – the long value to format
  • buffer – StringBuffer to append to
  • position – On input: an alignment field, if desired. On output: the offsets of the alignment field
See Also:
Returns:a reference to the appended buffer
/** * Formats a long value as a fraction and appends the result to a StringBuffer. * * @param value the long value to format * @param buffer StringBuffer to append to * @param position On input: an alignment field, if desired. On output: the * offsets of the alignment field * @return a reference to the appended buffer * @see #format(Object, StringBuffer, FieldPosition) */
@Override public StringBuffer format(final long value, final StringBuffer buffer, final FieldPosition position) { return format(Long.valueOf(value), buffer, position); } }