use std::any::{Any};
use std::str;
#[macro_export]
macro_rules! r#u8 {
($item:expr) => {
$crate::int::to_f64($item) as u8
};
}
#[macro_export]
macro_rules! r#u16 {
($item:expr) => {
$crate::int::to_f64($item) as u16
};
}
#[macro_export]
macro_rules! r#u32 {
($item:expr) => {
$crate::int::to_f64($item) as u32
};
}
#[macro_export]
macro_rules! r#u64 {
($item:expr) => {
$crate::int::to_f64($item) as u64
};
}
#[macro_export]
macro_rules! r#u128 {
($item:expr) => {
$crate::int::to_f64($item) as u128
};
}
#[macro_export]
macro_rules! r#i8 {
($item:expr) => {
$crate::int::to_f64($item) as i8
};
}
#[macro_export]
macro_rules! r#i16 {
($item:expr) => {
$crate::int::to_f64($item) as i16
};
}
#[macro_export]
macro_rules! r#i32 {
($item:expr) => {
$crate::int::to_f64($item) as i32
};
}
#[macro_export]
macro_rules! r#i64 {
($item:expr) => {
$crate::int::to_f64($item) as i64
};
}
#[macro_export]
macro_rules! r#i128 {
($item:expr) => {
$crate::int::to_f64($item) as i128
};
}
#[macro_export]
macro_rules! r#f32 {
($item:expr) => {
$crate::int::to_f64($item) as f32
};
}
#[macro_export]
macro_rules! r#f64 {
($item:expr) => {
$crate::int::to_f64($item)
};
}
#[allow(dead_code)]
pub fn to_f64(value:&dyn Any)->f64{
if let Some(v) = value.downcast_ref::<i8>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<i16>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<i32>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<i64>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<i128>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<u8>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<u16>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<u32>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<u64>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<u128>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<f32>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<f64>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<usize>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<isize>(){
*v as f64
}else if let Some(v) = value.downcast_ref::<bool>(){
if *v {1.0}else{0.0}
}else if let Some(v) = value.downcast_ref::<String>(){
v.parse::<f64>().unwrap()
}else if let Some(v) = value.downcast_ref::<&str>(){
v.parse::<f64>().unwrap()
}else {
0.0
}
}