Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中获取超过100个十进制数字?_C#_.net_Bigdecimal - Fatal编程技术网

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

如何在C#中获取超过100个十进制数字?,c#,.net,bigdecimal,C#,.net,Bigdecimal,有可能在C#中获得100个以上的十进制数字吗 如果是,代码的必要部分是什么 在Java中,有一种称为BigDecimal的东西,但它仍然不能超过55位。使用J#库: 可重新发行以获取J#类库。关于如何在.NET项目中使用它来获得ZIP功能,并解释了一些关于BigDecimal的内容,但正如Ramhound所解释的,这篇文章相对比较老 下载后,将vsjlib添加到项目中。它在.NET4.0上对我不起作用,但在2.0项目上起作用。它包含一个BigDecimal类等。不确定,但是,如果给你100个小数

有可能在C#中获得100个以上的十进制数字吗

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

在Java中,有一种称为BigDecimal的东西,但它仍然不能超过55位。

使用J#库: 可重新发行以获取J#类库。关于如何在.NET项目中使用它来获得ZIP功能,并解释了一些关于BigDecimal的内容,但正如Ramhound所解释的,这篇文章相对比较老

下载后,将
vsjlib
添加到项目中。它在.NET4.0上对我不起作用,但在2.0项目上起作用。它包含一个BigDecimal类等。不确定,但是,如果给你100个小数,但你可以试试

使用MPIR——多精度整数和有理数 您可以下载该库的包装器以供下载。然后,执行以下操作:

  • 将文件
    \wrapper.*.dll
    添加到项目中,确保在每个生成的文件上都将其复制到调试或发布目录中
  • \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
仅包含有效数字。您还必须添加用于打印指数或一组零的逻辑

结果是
6.22301527786114170714406405378010124240590252187211671330111661478969883403538344118394482312571361695696658955512248212471604347229009625E-60


完整MPIR库上的一个示例更详细地展示了如何使用它。

如果使用.net Framework 4.0,可以参考System.Numerics assembly。 或者您可以从codeplex下载

BigIngeger的用法:

例如:

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项目

使用W3b.Sine;
公共类表达式示例{
公共静态void Main(字符串[]args){
字典符号=新字典(){
{“x”,100}//定义了隐式转换
};
表达式=新表达式(“1+2/3*x”);
BigNum result=expression.Evaluate(符号);
Console.WriteLine(expression.ExpressionString+“=”+result.ToString());
BigNum x=100;
BigNum xPow100=x.Pow(100);
Console.WriteLine(“100^100=”+xPow100.ToString());
}
}

的可能重复项(本质上:C没有,您需要使用C吗?)为什么否决?关于高精度算术的问题似乎是很正常的,不需要系统。十进制数只支持大约28位,所以它不起作用
BigInteger
仅支持整数。我认为您需要使用一些第三方库,例如BigRational@sehe:Nah,作为答案,意味着我必须支持它:)感谢您的帮助,但正如您所知,此库使用BigDecimalt的java实现。本文不是最新版本。有一个类用来操纵一个zip文件,这是在文章被写了2年之后的至少5年的CalAST。@ Ramhound,我用Jj的正确下载位置更新了文本。@ HusseinX,我添加了MPIR库包装器的代码,这有点麻烦,但是这是因为它们来自C++世界。但是文档很好。使用
biginger
类如何帮助显示十进制值呢?不,它只计算十进制值。您对这个问题编辑了几次,但我仍然不知道它如何帮助浮点运算中的运算精度达到100+位(即小数)。您只提到大整数。正弦可以显示精度为100位的十进制值。请参阅中的详细信息
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() );

    }
}