C# 科学计算 - 大数小数位数

C# Scientific calculation - big number with many decimals

我有一个问题需要建议:我必须在 (plus/minus, signed) 范围内对大数进行计算;整数部分:70*(10^27) 和精度,小数部分:9*(10^-31)。大多数时候,我只进行简单的操作 (add/subtr/mult/div),我可以忽略小数部分的大多数数字(仅使用 8 位小数)——但是,在许多情况下,我必须采用 'whole' decimal 并以该精度进行计算(并存储用于后续计算的结果)。 一个数字的例子:

66898832014839425790021345548 . 8499970865478385639546957014538

我看到了 decimal vs long 等文章。我应该使用 decimal 还是应该制作自定义类型?如果稍后是,我该如何进行简单的算术运算? (最后一位小数点四舍五入是可以接受的) 我的项目都在 C# 和 SQL Server 中;非常感谢你。

C# 中没有标准实现,但您可以基于 BigInteger 创建自己的库,例如

public BigDecimal(BigInteger integer, BigInteger scale)

您还可以参考一些第 3 方库,例如 GMP with its .Net forks/ports like Math.Gmp.Native.NET, libgmp

有一些自定义库,正如 Franz Gleichmann 在他的评论中提到的那样:BigDecimal, AngouriMath

对于SQL 服务器,大多数库使用字符串来存储此类数据。例如,在 Java 中有 BigDecimal and it is mapped to string via JDBC.