⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqldouble.java

📁 derby database source code.good for you.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}	/**		Called for an application setting this value using a BigDecimal 	*/	public  void setBigDecimal(Number bigDecimal) throws StandardException	{		if (objectNull(bigDecimal)) 			return;		// Note BigDecimal.doubleValue() handles the case where		// its value is outside the range of a double. It returns		// infinity values which should throw an exception in setValue(double).		setValue(bigDecimal.doubleValue());			}	/**	 * @see NumberDataValue#setValue	 *	 */	public void setValue(boolean theValue)	{		value = theValue?1:0;		isnull = false;	}	/*	 * DataValueDescriptor interface	 */	/** @see DataValueDescriptor#typePrecedence */	public int typePrecedence()	{		return TypeId.DOUBLE_PRECEDENCE;	}	/*	** SQL Operators	*/	/**	 * The = operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the =	 * @param right			The value on the right side of the =	 *						is not.	 *	 * @return	A SQL boolean value telling whether the two parameters are equal	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue equals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getDouble() == right.getDouble());	}	/**	 * The <> operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the <>	 * @param right			The value on the right side of the <>	 *						is not.	 *	 * @return	A SQL boolean value telling whether the two parameters	 *			are not equal	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue notEquals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getDouble() != right.getDouble());	}	/**	 * The < operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the <	 * @param right			The value on the right side of the <	 *	 * @return	A SQL boolean value telling whether the first operand is less	 *			than the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue lessThan(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getDouble() < right.getDouble());	}	/**	 * The > operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the >	 * @param right			The value on the right side of the >	 *	 * @return	A SQL boolean value telling whether the first operand is greater	 *			than the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue greaterThan(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getDouble() > right.getDouble());	}	/**	 * The <= operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the <=	 * @param right			The value on the right side of the <=	 *	 * @return	A SQL boolean value telling whether the first operand is less	 *			than or equal to the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue lessOrEquals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getDouble() <= right.getDouble());	}	/**	 * The >= operator as called from the language module, as opposed to	 * the storage module.	 *	 * @param left			The value on the left side of the >=	 * @param right			The value on the right side of the >=	 *	 * @return	A SQL boolean value telling whether the first operand is greater	 *			than or equal to the second operand	 *	 * @exception StandardException		Thrown on error	 */	public BooleanDataValue greaterOrEquals(DataValueDescriptor left,							DataValueDescriptor right)			throws StandardException	{		return SQLBoolean.truthValue(left,									 right,									 left.getDouble() >= right.getDouble());	}	/**	 * This method implements the + operator for "double + double".	 *	 * @param addend1	One of the addends	 * @param addend2	The other addend	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLDouble containing the result of the addition	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue plus(NumberDataValue addend1,							NumberDataValue addend2,							NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLDouble();		}		if (addend1.isNull() || addend2.isNull())		{			result.setToNull();			return result;		}		double tmpresult = addend1.getDouble() + addend2.getDouble();        // No need to check underflow (result rounded to 0.0),        // since the difference between two non-equal valid DB2 DOUBLE values is always non-zero in java.lang.Double precision.		result.setValue(tmpresult);		return result;	}	/**	 * This method implements the - operator for "double - double".	 *	 * @param left	The value to be subtracted from	 * @param right	The value to be subtracted	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLDouble containing the result of the subtraction	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue minus(NumberDataValue left,							NumberDataValue right,							NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLDouble();		}		if (left.isNull() || right.isNull())		{			result.setToNull();			return result;		}		double tmpresult = left.getDouble() - right.getDouble();        // No need to check underflow (result rounded to 0.0),        // since no difference between two valid DB2 DOUBLE values can be rounded off to 0.0 in java.lang.Double		result.setValue(tmpresult);		return result;	}	/**	 * This method implements the * operator for "double * double".	 *	 * @param left	The first value to be multiplied	 * @param right	The second value to be multiplied	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLDouble containing the result of the multiplication	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue times(NumberDataValue left,							NumberDataValue right,							NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLDouble();		}		if (left.isNull() || right.isNull())		{			result.setToNull();			return result;		}        double leftValue = left.getDouble();        double rightValue = right.getDouble();		double tempResult = leftValue * rightValue;        // check underflow (result rounded to 0.0)        if ( (tempResult == 0.0) && ( (leftValue != 0.0) && (rightValue != 0.0) ) ) {			throw StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, TypeId.DOUBLE_NAME);        }		result.setValue(tempResult);		return result;	}	/**	 * This method implements the / operator for "double / double".	 *	 * @param dividend	The numerator	 * @param divisor	The denominator	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLDouble containing the result of the division	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue divide(NumberDataValue dividend,							 NumberDataValue divisor,							 NumberDataValue result)				throws StandardException	{		if (result == null)		{			result = new SQLDouble();		}		if (dividend.isNull() || divisor.isNull())		{			result.setToNull();			return result;		}		/*		** For double division, we can't catch divide by zero with Double.NaN;		** So we check the divisor before the division.		*/		double divisorValue = divisor.getDouble();		if (divisorValue == 0.0e0D)		{			throw StandardException.newException(SQLState.LANG_DIVIDE_BY_ZERO);		}        double dividendValue = dividend.getDouble();		double divideResult =  dividendValue / divisorValue;		if (Double.isNaN(divideResult))		{			throw StandardException.newException(SQLState.LANG_DIVIDE_BY_ZERO);		}        // check underflow (result rounded to 0.0d)        if ((divideResult == 0.0d) && (dividendValue != 0.0d)) {			throw StandardException.newException(SQLState.LANG_OUTSIDE_RANGE_FOR_DATATYPE, TypeId.DOUBLE_NAME);        }		result.setValue(divideResult);		return result;	}	/**	 * This method implements the unary minus operator for double.	 *	 * @param result	The result of a previous call to this method, null	 *					if not called yet	 *	 * @return	A SQLDouble containing the result of the division	 *	 * @exception StandardException		Thrown on error	 */	public NumberDataValue minus(NumberDataValue result)									throws StandardException	{		double		minusResult;		if (result == null)		{			result = new SQLDouble();		}		if (this.isNull())		{			result.setToNull();			return result;		}		/*		** Doubles are assumed to be symmetric -- that is, their		** smallest negative value is representable as a positive		** value, and vice-versa.		*/		minusResult = -(this.getDouble());		result.setValue(minusResult);		return result;	}    /**     * This method implements the isNegative method.     *     * @return  A boolean.  If this.value is negative, return true.     *          For positive values or null, return false.     */    protected boolean isNegative()    {        return !isNull() && (value < 0.0d);    }	/*	 * String display of value	 */	public String toString()	{		if (isNull())			return "NULL";		else			return Double.toString(value);	}	/*	 * Hash code	 */	public int hashCode()	{		long longVal = (long) value;		double doubleLongVal = (double) longVal;		/*		** NOTE: This is coded to work around a bug in Visual Cafe 3.0.		** If longVal is compared directly to value on that platform		** with the JIT enabled, the values will not always compare		** as equal even when they should be equal. This happens with		** the value Long.MAX_VALUE, for example.		**		** Assigning the long value back to a double and then doing		** the comparison works around the bug.		**		** This fixes Cloudscape bug number 1757.		**		**		-	Jeff Lichtman		*/		if (doubleLongVal != value)        {			longVal = Double.doubleToLongBits(value);		}		return (int) (longVal ^ (longVal >> 32));		}	/*	 * useful constants...	 */	static final int DOUBLE_LENGTH		= 32; // must match the number of bytes written by DataOutput.writeDouble()    private static final int BASE_MEMORY_USAGE = ClassSize.estimateBaseFromCatalog( SQLDouble.class);    public int estimateMemoryUsage()    {        return BASE_MEMORY_USAGE;    }	/*	 * object state	 */	private double	value;	private boolean	isnull;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -