#numbers #decimal-number #fraction #floating-point #representation #choice #flexible

num-notation

提供多种数字选择,允许您处理包括标准形式、分数和 f64 浮点小数在内的各种数字表示形式。这个多功能的crate使您的Rust项目能够灵活地处理数字。

7个版本

0.1.6 2023年11月17日
0.1.5 2023年10月25日
0.1.3 2023年9月29日

#846解析器实现

Download history 46/week @ 2024-04-01

每月62次下载

MIT/Apache

37KB
791

num-notation

num-notation 提供多种数字选择,允许您处理包括标准形式、分数和 f64 浮点小数在内的各种数字表示形式。这个多功能的crate使您的Rust项目能够灵活地处理数字。

功能

  • 创建和操作灵活的数字表示和表示。

  • 轻松切换到不同的数字选择,包括

    • StandardForm:标准形式表示的数字。
    • 分数:分数数字。
    • Decimal:浮点小数数字。
  • 为数字变体实现克隆和调试派生。

  • num_traits crate 集成,以进行高级数字操作。

  • 可以使用 hash 功能进行哈希。

  • 使用 nom 功能与 nom 集成

安装

要在您的Rust项目中使用 num-notation,只需将其添加到您的 Cargo.toml

[dependencies]
num-notation = "0.1" # VERSION AT TIME OF WRITING

要启用与 num_traits 的集成,启用 num 功能

[dependencies]
num-notation = { version = "0.1" , features = ["num"] } # VERSION AT TIME OF WRITING

要启用哈希,启用 hash 功能

[dependencies]
num-notation = { version = "0.1.1" , features = ["hash"] } # VERSION AT TIME OF WRITING

要启用与 nom 的集成,启用 nom 功能

[dependencies]
num-notation = { version = "0.1.1" , features = ["nom"] }

使用方法

创建数字

// Create numbers using the Number enum variants
let decimal_number = Number::Decimal(42.0);
let standard_form_number = Number::StandardForm(StandardForm::new(1.23, 2)); // Mantissa: 1.23, Exponent: 2
let fraction_number = Number::Fraction(Fraction::new(3, 4)); // Numerator: 3, Denominator: 4

您可以使用 Number 枚举变体创建数字。在此,我们创建了十进制、标准形式和分数数字的实例。

执行算术运算

// Perform arithmetic operations
let result = decimal_number + standard_form_number; // Adds a decimal and a number in standard form
println!("Result: {:?}", result);

提取值

// Extract values
if let Number::Decimal(d) = decimal_number {
    println!("Decimal value: {}", d);
}

if let Number::StandardForm(sf) = standard_form_number {
    println!("StandardForm mantissa: {}, exponent: {}", sf.mantissa(), sf.exponent());
}

if let Number::Fraction(fr) = fraction_number {
    println!("Fraction numerator: {}, denominator: {}", fr.numerator(), fr.denominator());
}

比较数字

// Compare numbers
let num1 = Number::Decimal(5.0);
let num2 = Number::StandardForm(StandardForm::new(500.0, -2)); // 500.0e-2 = 5.0
if num1 == num2 {
    println!("Numbers are equal.");
} else {
    println!("Numbers are not equal.");
}

请注意,这里提供的示例是简化的,仅作为起点。有关crate的完整文档,请访问crate文档,以更好地了解crate的功能和API。

注意

虽然我们努力覆盖尽可能多的场景,但数学的复杂性意味着在所有情况和操作中实现100%的准确性可能具有挑战性。如果您在库中遇到任何问题或不准确性,请毫不犹豫地报告它们,以便我们可以努力改进它。您的反馈对于帮助我们进行必要的改进至关重要。

贡献

欢迎贡献!如果您发现了一个错误或想提出改进建议,请随时打开一个问题或提交一个拉取请求。

依赖项

~1.4–2.1MB
~47K SLoC