6 个版本
0.2.3 | 2023 年 4 月 30 日 |
---|---|
0.2.2 | 2023 年 4 月 26 日 |
0.1.1 | 2023 年 4 月 17 日 |
#661 in 算法
每月 55 次下载
48KB
925 行
Number-Based: 用于处理数字基的工具
Number-Based 是我尝试使处理数字基变得简单的尝试。
概述
目前,这个库围绕两种类型构建:uBase 和 iBase(希望不久的将来会有更多)。它们基本上等同于 u32/u64 和 i32/i64,但有一个限制,即它们可以存在于任何基数中,$B \in \mathbb{N}$。
随着基的增加,数字将开始看起来有点奇怪(因为西方数字系统没有大于 10 的基数的表示)。对于 10 到 36 的基数,数字以字母表示。对于大于 36 的基数,没有普遍的共识,因此这个库遵循大于 36 的基数的 utf8 编码序列。请注意,并不是所有 utf8 编码都被使用,因为某些编码不是在字符串中表示数字的有效字符。另外请注意,“-”不是一个有效的图形字符,因为它代表负数(见下例)。为了指定与该库中包含的不同的图形字符,请使用 custom_graphemes 功能(见文档)。有关使用自定义图形字符的参考,请参阅 示例文件夹 Github。
用法
示例(这些可以在 示例文件夹 Github 中找到)
转换 uBase/iBase 实例
// converting down
// create uBase instance
let mut number = uBase::from_string(7863, "NUMBERBASED");
// convert number to base 10
number.convert(10);
assert_eq!(number.display(), String::from("20781774882369576414324066149192513674771"));
// Do aslso note that number.conver(10).display() is equivalent to number.as_decimal() with the
// important distinction that as_decimal() returns a u128 and not a string
// converting up
// create uBase instance
let mut other_number = uBase::from_string(10, "120387517860123746975");
// convert number to base 10000
other_number.convert(10000);
assert_eq!(other_number.display(), String::from("1ࡒᶹ⇵ঢᮛ"));
使用 uBase/iBase 实例执行操作
// create the iBase instances
let number1 = iBase::from_string(30000, "-ð䧈炙㞈榻");
assert_eq!(number1.as_decimal(), -120387517860123746975);
let number2 = iBase::from_string(30000, "20");
assert_eq!(number2.as_decimal(), 60000);
// divide the numbers
let quotient = number1 / number2;
// other operations such as addition, subtraction, and multiplication are also available with
// the operators "+", "-", and "*" respectively
assert_eq!(quotient.display(), String::from("-¦┒㡺嚊"));
assert_eq!(quotient.as_decimal(), -120387517860123746975 / 60000);
许可证
Apache-2.0
请参阅 许可证文档 以获取完整的许可证。
依赖项
~48KB