如何在c#中获得超过100个十进制数字?

本文关键字:100个 十进制数字 | 更新日期: 2023-09-27 18:12:14

是否有可能在c#中获得超过100个十进制数字?

如果是,代码的必要部分是什么?

在Java中有一个叫做BigDecimal的东西,但是它仍然不能超过55位。

如何在c#中获得超过100个十进制数字?

使用j#库:

下载j# Redistributable获取j#类库。本文提示了如何在。net项目中使用它来获得zip功能,并对BigDecimal进行了一些解释,但正如Ramhound所解释的,这篇文章相对较老。

下载后,将vsjlib添加到您的项目中。它在。net 4.0上不起作用,但在。net 2.0项目上却起作用了。它包含一个BigDecimal类等。但是,不确定它是否能提供100个小数,但您可以尝试一下。

使用MPIR——多精度整数和有理数

你可以在这里下载。net的MPIR库的包装器(下载0.2版)。然后,执行以下操作:

  • 'wrapper.*.dll文件添加到您的项目中,确保在每次构建时将它们复制到您的Debug或Release目录。
  • 添加'wrapper'xmpir.cs到您的项目
  • 将以下代码添加到您的项目中:

    // set the precision to 512 bits (adjust this to your needs)
    mpir.mpf_set_default_prec(512);
    ulong default_prc = mpir.mpf_get_default_prec();
    // init vars (important!)
    mpir.mpf_t val = mpir.mpf_init_set_d(.5);
    mpir.mpf_t result = mpir.mpf_init_set_ui(0);
    // calculate 0.5^200
    mpir.mpf_pow_ui(result, val, 200);
    double dresult = mpir.mpf_get_d(result);
    // convert result to a string, in the form 1.2345 (dot not in output) and exp holding exponent
    long exp;
    string sresult = mpir.mpf_get_string(out exp, 10, 0, result);
    // free vars (important!)
    mpir.mpf_clear(val);
    mpir.mpf_clear(result);
    

注意变量sresult只保存有效数字。您还必须添加打印指数的逻辑,或者一堆零。

Result is 6.2230152778611417071440640537801242405902521687211671331011166147896988340353834411839448231257136169569665895551224821247160434722900390625E-60

完整MPIR库的文档PDF文件展示了如何更详细地使用它。

如果你使用。net Framework 4.0,你可以参考System。数字装配。或者你可以从codeplex下载BigInteger

bigingger的用法:http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

例如:

string positiveString = "91389681247993671255432112000000";
string negativeString = "-90315837410896312071002088037140000";
BigInteger posBigInt = 0;
BigInteger negBigInt = 0;
try {
   posBigInt = BigInteger.Parse(positiveString);
   Console.WriteLine(posBigInt);
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert the string '{0}' to a BigInteger value.", 
                     positiveString);
}
if (BigInteger.TryParse(negativeString, out negBigInt))
  Console.WriteLine(negBigInt);
else
   Console.WriteLine("Unable to convert the string '{0}' to a BigInteger value.", 
                      negativeString);
// The example displays the following output:
//   9.1389681247993671255432112E+31
//   -9.0315837410896312071002088037E+34

编辑:这里有一个bigNum项目http://sine.codeplex.com/

using W3b.Sine;
public class ExpressionSample {
    public static void Main(String[] args) {
        Dictionary<String,BigNum> symbols = new Dictionary<String,BigNum>() {
            {"x", 100} // the implicit conversion defined
        };
        Expression expression = new Expression("1 + 2 / 3 * x");
        BigNum result = expression.Evaluate( symbols );
        Console.WriteLine( expression.ExpressionString + " == " + result.ToString() );
        BigNum x = 100;
        BigNum xPow100 = x.Pow( 100 );
        Console.WriteLine("100^100 == " + xPow100.ToString() );
    }
}