001 package railo.runtime.functions.other; 002 003 import railo.runtime.PageContext; 004 import railo.runtime.exp.FunctionException; 005 import railo.runtime.exp.PageException; 006 import railo.runtime.op.Caster; 007 import railo.runtime.op.Decision; 008 009 public class ToNumeric { 010 public static double call(PageContext pc , Object value) throws PageException { 011 return Caster.toDoubleValue(value); 012 } 013 public static double call(PageContext pc , Object value, Object oRadix) throws PageException { 014 if(oRadix==null) return call(pc, value); 015 int radix; 016 if(Decision.isNumeric(oRadix)){ 017 radix=Caster.toIntValue(oRadix); 018 if(radix<Character.MIN_RADIX || radix>Character.MAX_RADIX) 019 throw invalidRadix(pc, Caster.toString(radix)); 020 } 021 else { 022 String str = Caster.toString(oRadix).trim().toLowerCase(); 023 if("bin".equals(str)) radix=2; 024 else if("oct".equals(str)) radix=8; 025 else if("dec".equals(str)) radix=10; 026 else if("hex".equals(str)) radix=16; 027 else throw invalidRadix(pc,str); 028 } 029 030 return (double)Integer.parseInt(Caster.toString(value), radix); 031 } 032 033 private static FunctionException invalidRadix(PageContext pc , String radix) { 034 return new FunctionException(pc, "ToNumeric", 2, "radix", "invalid value ["+radix+"], valid values are ["+Character.MIN_RADIX+"-"+Character.MAX_RADIX+",bin,oct,dec,hex]"); 035 } 036 }