@@ -255,6 +255,17 @@ fn string_parse_int(actor: &mut Actor, s: Value, radix: Value) -> Result<Value,
255255 }
256256}
257257
258+ /// Try to parse the string as a float
259+ fn string_parse_float ( actor : & mut Actor , s : Value ) -> Result < Value , String >
260+ {
261+ let s = unwrap_str ! ( s) ;
262+
263+ match s. parse :: < f64 > ( ) {
264+ Ok ( float_val) => Ok ( Value :: from ( float_val) ) ,
265+ Err ( _) => Ok ( Value :: Nil ) ,
266+ }
267+ }
268+
258269/// Trim whitespace
259270fn string_trim ( actor : & mut Actor , s : Value ) -> Result < Value , String >
260271{
@@ -403,6 +414,7 @@ pub fn get_method(val: Value, method_name: &str) -> Value
403414 static STRING_BYTE_AT : HostFn = HostFn { name : "byte_at" , f : Fn2 ( string_byte_at) } ;
404415 static STRING_CHAR_AT : HostFn = HostFn { name : "char_at" , f : Fn2 ( string_char_at) } ;
405416 static STRING_PARSE_INT : HostFn = HostFn { name : "parse_int" , f : Fn2 ( string_parse_int) } ;
417+ static STRING_PARSE_FLOAT : HostFn = HostFn { name : "parse_float" , f : Fn1 ( string_parse_float) } ;
406418 static STRING_TRIM : HostFn = HostFn { name : "trim" , f : Fn1 ( string_trim) } ;
407419 static STRING_UPPER : HostFn = HostFn { name : "upper" , f : Fn1 ( string_upper) } ;
408420 static STRING_LOWER : HostFn = HostFn { name : "lower" , f : Fn1 ( string_lower) } ;
@@ -466,6 +478,7 @@ pub fn get_method(val: Value, method_name: &str) -> Value
466478 ( Value :: String ( _) , "byte_at" ) => & STRING_BYTE_AT ,
467479 ( Value :: String ( _) , "char_at" ) => & STRING_CHAR_AT ,
468480 ( Value :: String ( _) , "parse_int" ) => & STRING_PARSE_INT ,
481+ ( Value :: String ( _) , "parse_float" ) => & STRING_PARSE_FLOAT ,
469482 ( Value :: String ( _) , "trim" ) => & STRING_TRIM ,
470483 ( Value :: String ( _) , "upper" ) => & STRING_UPPER ,
471484 ( Value :: String ( _) , "lower" ) => & STRING_LOWER ,
0 commit comments