use gy_r_number::*;
fn main() {
println!("=== Number 类型基本使用示例 ===");
let int_num = Number::from(42);
let big_num = Number::from_big_int_str("999999999999999999999999999999", 10);
let rational = Number::from_rational(
num_bigint::BigInt::from(22),
num_bigint::BigInt::from(7)
); let float_num = Number::from(3.14159);
println!("整数: {}", int_num);
println!("大整数: {}", big_num);
println!("有理数: {} (分数表示: {})", rational, rational.to_fraction_string());
println!("浮点数: {}", float_num);
println!("\n=== 基本运算 ===");
let a = Number::from(10);
let b = Number::from(3);
println!("{} + {} = {}", a, b, a.clone() + b.clone());
println!("{} - {} = {}", a, b, a.clone() - b.clone());
println!("{} * {} = {}", a, b, a.clone() * b.clone());
println!("{} / {} = {}", a, b, a.clone() / b.clone());
println!("\n=== 数学函数 ===");
let num = Number::from(16);
println!("sqrt({}) = {}", num, num.sqrt());
println!("abs({}) = {}", Number::from(-5), Number::from(-5).abs());
println!("pow({}, 2) = {}", Number::from(3), Number::from(3).pow(&Number::from(2)));
println!("\n=== 类型转换 ===");
let small_num = Number::from(42);
match small_num.try_to::<i32>() {
Ok(value) => println!("成功转换为 i32: {}", value),
Err(error) => println!("转换失败: {}", error),
}
let big_number = Number::from_big_int_str("999999999999999999999999999999", 10);
let zero_fallback: i32 = big_number.unwrap_or_lossy();
println!("大数转换为 i32 (零值后备): {}", zero_fallback);
let saturated: i32 = big_number.unwrap_saturating();
println!("大数转换为 i32 (饱和转换): {}", saturated);
let custom: i32 = big_number.unwrap_or(-1);
println!("大数转换为 i32 (自定义后备): {}", custom);
println!("\n=== 带警告的转换 ===");
let _with_warning: i32 = big_number.unwrap_with_warning(FallbackValue::Zero);
println!("\n=== 字符串解析 ===");
let parsed_int = Number::parse_int("12345", Some(10));
let parsed_hex = Number::parse_int("FF", Some(16));
let parsed_float = Number::parse_float("3.14159");
println!("解析整数 '12345': {}", parsed_int);
println!("解析十六进制 'FF': {}", parsed_hex);
println!("解析浮点数 '3.14159': {}", parsed_float);
println!("\n=== 内存使用情况 ===");
println!("小整数内存使用: {} 字节", int_num.memory_size());
println!("大整数内存使用: {} 字节", big_num.memory_size());
println!("有理数内存使用: {} 字节", rational.memory_size());
println!("浮点数内存使用: {} 字节", float_num.memory_size());
println!("\n=== 示例完成 ===");
}