// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) fieldsfirst lnc
// Source File Name: NumericValue.java
package com.icl.saxon.expr;
import java.io.PrintStream;
import java.math.BigDecimal;
// Referenced classes of package com.icl.saxon.expr:
// Value, XPathException, Expression
public final class NumericValue extends Value
{
private double value;
public NumericValue(double d)
{
/* 20*/ value = d;
}
public NumericValue(String s)
{
/* 29*/ value = Value.stringToNumber(s);
}
public String asStringOLD()
{
/* 40*/ if(Double.isNaN(value))
/* 40*/ return "NaN";
/* 41*/ if(Double.isInfinite(value))
/* 41*/ return value <= 0.0D ? "-Infinity" : "Infinity";
/* 42*/ if(value == 0.0D)
/* 42*/ return "0";
/* 44*/ double d = Math.abs(value);
/* 45*/ StringBuffer stringbuffer = new StringBuffer();
/* 46*/ if(value < 0.0D)
/* 46*/ stringbuffer.append('-');
/* 47*/ int i = value >= 0.0D ? 0 : 1;
/* 48*/ double d1 = Math.floor(d);
/* 49*/ double d2 = d - d1;
/* 50*/ if(d1 >= 1.0D)
/* 52*/ for(; d1 >= 1.0D; d1 = Math.floor(d1 / 10D))
{
/* 52*/ int j = (int)(d1 % 10D);
/* 53*/ char c = (char)(j + 48);
/* 54*/ stringbuffer.insert(i, c);
}
/* 59*/ else
/* 59*/ stringbuffer.append('0');
/* 61*/ if(d2 > 0.0D)
{
/* 62*/ stringbuffer.append('.');
double d3;
/* 64*/ for(; d2 > 0.0D; d2 = d3 % 1.0D)
{
/* 64*/ d3 = d2 * 10D;
/* 65*/ if(d3 < 1.0000000000010001D && d3 > 0.99999999999900002D)
/* 65*/ d3 = 1.0D;
/* 66*/ double d4 = Math.floor(d3);
/* 67*/ char c1 = (char)((int)d4 + 48);
/* 68*/ stringbuffer.append(c1);
}
}
/* 72*/ return stringbuffer.toString();
}
public String asString()
{
/* 83*/ if(!Double.isInfinite(value) && (value >= 9007199254740992D || -value >= 9007199254740992D))
/* 86*/ return (new BigDecimal(value)).toString();
/* 88*/ String s = Double.toString(value);
/* 89*/ int i = s.length();
/* 90*/ if(s.charAt(i - 2) == '.' && s.charAt(i - 1) == '0')
{
/* 91*/ s = s.substring(0, i - 2);
/* 92*/ if(s.equals("-0"))
/* 93*/ return "0";
/* 94*/ else
/* 94*/ return s;
}
/* 96*/ int j = s.indexOf('E');
/* 97*/ if(j < 0)
/* 98*/ return s;
/* 99*/ int k = Integer.parseInt(s.substring(j + 1));
String s1;
/* 101*/ if(s.charAt(0) == '-')
{
/* 102*/ s1 = "-";
/* 103*/ s = s.substring(1);
/* 104*/ j--;
} else
{
/* 107*/ s1 = "";
}
/* 109*/ int l = j - 2;
/* 110*/ if(k >= l)
/* 111*/ return s1 + s.substring(0, 1) + s.substring(2, j) + zeros(k - l);
/* 112*/ if(k > 0)
/* 113*/ return s1 + s.substring(0, 1) + s.substring(2, 2 + k) + "." + s.substring(2 + k, j);
/* 116*/ for(; s.charAt(j - 1) == '0'; j--);
/* 117*/ return s1 + "0." + zeros(-1 - k) + s.substring(0, 1) + s.substring(2, j);
}
private static String zeros(int i)
{
/* 122*/ char ac[] = new char[i];
/* 123*/ for(int j = 0; j < i; j++)
/* 124*/ ac[j] = '0';
/* 125*/ return new String(ac);
}
public double asNumber()
{
/* 134*/ return value;
}
public boolean asBoolean()
{
/* 143*/ return value != 0.0D && !Double.isNaN(value);
}
public int getDataType()
{
/* 153*/ return 2;
}
public int conversionPreference(Class class1)
{
/* 164*/ if(class1 == (java.lang.Object.class))
/* 164*/ return 17;
/* 165*/ if(class1.isAssignableFrom(com.icl.saxon.expr.NumericValue.class))
/* 165*/ return 0;
/* 167*/ if(class1 == Boolean.TYPE)
/* 167*/ return 14;
/* 168*/ if(class1 == (java.lang.Boolean.class))
/* 168*/ return 15;
/* 169*/ if(class1 == Byte.TYPE)
/* 169*/ return 12;
/* 170*/ if(class1 == (java.lang.Byte.class))
/* 170*/ return 13;
/* 171*/ if(class1 == Character.TYPE)
/* 171*/ return 10;
/* 172*/ if(class1 == (java.lang.Character.class))
/* 172*/ return 11;
/* 173*/ if(class1 == Double.TYPE)
/* 173*/ return 0;
/* 174*/ if(class1 == (java.lang.Double.class))
/* 174*/ return 1;
/* 175*/ if(class1 == Float.TYPE)
/* 175*/ return 2;
/* 176*/ if(class1 == (java.lang.Float.class))
/* 176*/ return 3;
/* 177*/ if(class1 == Integer.TYPE)
/* 177*/ return 6;
/* 178*/ if(class1 == (java.lang.Integer.class))
/* 178*/ return 7;
/* 179*/ if(class1 == Long.TYPE)
/* 179*/ return 4;
/* 180*/ if(class1 == (java.lang.Long.class))
/* 180*/ return 5;
/* 181*/ if(class1 == Short.TYPE)
/* 181*/ return 8;
/* 182*/ if(class1 == (java.lang.Short.class))
/* 182*/ return 9;
/* 183*/ return class1 != (java.lang.String.class) ? 0x7fffffff : 16;
}
public Object convertToJava(Class class1)
throws XPathException
{
/* 192*/ if(class1 == (java.lang.Object.class))
/* 193*/ return new Double(value);
/* 194*/ if(class1.isAssignableFrom(com.icl.saxon.expr.NumericValue.class))
/* 195*/ return this;
/* 196*/ if(class1 == Boolean.TYPE)
/* 197*/ return new Boolean(asBoolean());
/* 198*/ if(class1 == (java.lang.Boolean.class))
/* 199*/ return new Boolean(asBoolean());
/* 200*/ if(class1 == (java.lang.String.class))
/* 201*/ return asString();
/* 202*/ if(class1 == Double.TYPE)
/* 203*/ return new Double(value);
/* 204*/ if(class1 == (java.lang.Double.class))
/* 205*/ return new Double(value);
/* 206*/ if(class1 == Float.TYPE)
/* 207*/ return new Float(value);
/* 208*/ if(class1 == (java.lang.Float.class))
/* 209*/ return new Float(value);
/* 210*/ if(class1 == Long.TYPE)
/* 211*/ return new Long((long)value);
/* 212*/ if(class1 == (java.lang.Long.class))
/* 213*/ return new Long((long)value);
/* 214*/ if(class1 == Integer.TYPE)
/* 215*/ return new Integer((int)value);
/* 216*/ if(class1 == (java.lang.Integer.class))
/* 217*/ return new Integer((int)value);
/* 218*/ if(class1 == Short.TYPE)
/* 219*/ return new Short((short)(int)value);
/* 220*/ if(class1 == (java.lang.Short.class))
/* 221*/ return new Short((short)(int)value);
/* 222*/ if(class1 == Byte.TYPE)
/* 223*/ return new Byte((byte)(int)value);
/* 224*/ if(class1 == (java.lang.Byte.class))
/* 225*/ return new Byte((byte)(int)value);
/* 226*/ if(class1 == Character.TYPE)
/* 227*/ return new Character((char)(int)value);
/* 228*/ if(class1 == (java.lang.Character.class))
/* 229*/ return new Character((char)(int)value);
/* 231*/ else
/* 231*/ throw new XPathException("Conversion of number to " + class1.getName() + " is not supported");
}
public void display(int i)
{
/* 241*/ System.err.println(Expression.indent(i) + "number (" + asString() + ")");
}
}