001 /* 002 // $Id: DecimalType.java 247 2009-06-20 05:52:40Z jhyde $ 003 // This software is subject to the terms of the Eclipse Public License v1.0 004 // Agreement, available at the following URL: 005 // http://www.eclipse.org/legal/epl-v10.html. 006 // Copyright (C) 2005-2008 Julian Hyde 007 // All Rights Reserved. 008 // You must accept the terms of that agreement to use this software. 009 */ 010 package org.olap4j.type; 011 012 /** 013 * Subclass of {@link NumericType} which guarantees fixed number of decimal 014 * places. In particular, a decimal with zero scale is an integer. 015 * 016 * @author jhyde 017 * @since May 3, 2005 018 * @version $Id: DecimalType.java 247 2009-06-20 05:52:40Z jhyde $ 019 */ 020 public class DecimalType extends NumericType { 021 private final int precision; 022 private final int scale; 023 024 /** 025 * Creates a decimal type with precision and scale. 026 * 027 * <p>Examples:<ul> 028 * <li>123.45 has precision 5, scale 2. 029 * <li>12,345,000 has precision 5, scale -3. 030 * </ul> 031 * 032 * <p>The largest value is 10 ^ (precision - scale). Hence the largest 033 * <code>DECIMAL(5, -3)</code> value is 10 ^ 8. 034 * 035 * @param precision Maximum number of decimal digits which a value of 036 * this type can have. 037 * Must be greater than zero. 038 * Use {@link Integer#MAX_VALUE} if the precision is unbounded. 039 * @param scale Number of digits to the right of the decimal point. 040 */ 041 public DecimalType(int precision, int scale) { 042 super(); 043 assert precision > 0 : "expected precision > 0"; 044 this.precision = precision; 045 this.scale = scale; 046 } 047 048 /** 049 * Returns the maximum number of decimal digits which a value of 050 * this type can have. 051 * 052 * @return maximum precision allowed for values of this type 053 */ 054 public int getPrecision() { 055 return precision; 056 } 057 058 /** 059 * Returns the number of digits to the right of the decimal point. 060 * 061 * @return number of digits to the right of the decimal point 062 */ 063 public int getScale() { 064 return scale; 065 } 066 067 public String toString() { 068 return precision == Integer.MAX_VALUE 069 ? "DECIMAL(" + scale + ")" 070 : "DECIMAL(" + precision + ", " + scale + ")"; 071 } 072 } 073 074 // End DecimalType.java