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

Hus*_*awi 13 .net c# bigdecimal

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

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

在Java中有一些调用,BigDecimal但它仍然不能达到超过55位数.

Abe*_*bel 9

使用J#库:

下载J# Redistributable以获取J#类库.本文提示如何使用它来获取.NET项目中的ZIP功能,并解释一下BigDecimal,但正如Ramhound所解释的那样,这篇文章相对较旧.

下载后,将其添加vsjlib到您的项目中.它在.NET 4.0上对我不起作用,但它确实适用于2.0项目.它包含一个BigDecimal类.但是,不确定,如果它给你最多100个小数,但你可以尝试一下.

使用MPIR - 多精度整数和理性

您可以在此处下载适用于.NETMPIR库的包装器(下载版本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);
    
    Run Code Online (Sandbox Code Playgroud)

请注意,变量sresult仅保留有效数字.您还必须添加用于打印指数的逻辑,或者一堆零.

结果是 6.2230152778611417071440640537801242405902521687211671331011166147896988340353834411839448231257136169569665895551224821247160434722900390625E-60

一个文档,PDF文件上,充分MPIR库展示了如何详细使用它.