是否有可能在C#中获得超过100个十进制数字?
如果是,那么代码的必要部分是什么?
在Java中有一些调用,BigDecimal但它仍然不能达到超过55位数.
我正在编写一个需要在C#中准确划分BigInteger类的类.
例:
BigInteger x = BigInteger.Parse("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
BigInteger y = BigInteger.Parse("2000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
x /= y;
Console.WriteLine(x.ToString());
//Output = 0
Run Code Online (Sandbox Code Playgroud)
问题是作为一个整数,自然它不包含十进制值.我怎样才能克服这一点,得到0.5的实际结果(给出的例子).
PS解决方案必须能够准确地划分任何BigInteger,而不仅仅是示例!
System.Numerics.BigInteger允许你将大整数相乘,但浮点数是否有相同类型的东西?如果没有,我可以使用免费图书馆吗?
//this but with floats
System.Numerics.BigInteger maxint = new BigInteger(int.MaxValue);
System.Numerics.BigInteger big = maxint * maxint * maxint;
System.Console.WriteLine(big);
Run Code Online (Sandbox Code Playgroud) 我的程序的一部分需要在while循环中使用值:
0.1
0.2
0.3
...
0.9
所以我需要在循环中提供它们.这是代码:
double x = 0.0;
while ( x<=1 )
{
// increment x by 0.1 for each iteration
x += 0.1;
}
Run Code Online (Sandbox Code Playgroud)
我需要输出完全正确:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
但它实际上给了我一些类似的东西:
0.1
0.2
0.300000000000000000000000004
0.4
0.5
0.6
0.79999999999999999999999999
0.89999999999999999999999999
0.99999999999999999999999999
我的值大于1.97626258336499E-323
我也不能使用BigInteger,因为它只处理整数值
任何帮助表示赞赏
以下是一些用户给出的解决方案失败的代码也失败了:
BigValue / (Math.Pow((1 + ret), j));
Run Code Online (Sandbox Code Playgroud)
这个BigValue就像15000.25
ret是-0.99197104212554987
j将大约500-600.
我也没有想到如何使用Rational Class
我试图使用BigInteger.Pow方法计算像10 ^ 12345.987654321这样的东西但这个方法只接受整数作为指数,如下所示:
BigInteger.Pow(BigInteger x,int y)
那么如何在上面的方法中使用双数作为指数?
我读到该Decimal类型的范围为(-7.9 x 10 ^ 28到7.9 x 10 ^ 28)/(10 ^ 0到10 ^ 28),并且它"适合于财务和货币计算".
我似乎无法找到说,十进制可以代表一个源到每一分钱,从(79,000,000,000,000,000,000,000,000,000.00 $)的所有值$ 79,000,000,000,000,000,000,000,000,000.00.
Decimal是一个128位类型,128位可以代表从-10 ^ 38到10 ^ 38的每一分钱.但是我不知道Decimal是如何实现的,因此floats可能会有一分钱的精度损失,数字从0开始越远.
我正在研究一个程序并将我的java代码转换为c#.但我遇到了一些麻烦.
public double round(double value){
BigDecimal b = new BigDecimal(value);
b = b.setScale(2,BigDecimal.ROUND_UP);
return (b.doubleValue());
}
Run Code Online (Sandbox Code Playgroud)
我写了这个转换代码,但我不能将它转换为c#.BigDecimal类型导致一些问题,我对.Net来说是全新的.无限期需要一些帮助.
编辑:好吧,我得到了,抱歉这个愚蠢的问题.
我Math.Round(decimal d, int decimals)在C#中使用将小数舍入到指定的小数位数.我可以舍入到 15位小数,但是当我尝试舍入到16时,例如,我得到以下异常:
mscorlib.dll中出现未处理的"System.ArgumentOutOfRangeException"类型的异常附加信息:舍入数字必须介于0和15之间(包括0和15).
是否有任何方法可以舍入到更高的小数位数,也许没有使用Math.Round?
为了给出更多问题的背景知识,我正在计算非理性数学常数,例如'pi'和'e',并让用户指定要计算的小数位数.用于检查值和先前值是否与给定精度相同的布尔值如下:
Math.Round(valuePrevious, decPlaces) == Math.Round(valueCurrent, decPlaces)
Run Code Online (Sandbox Code Playgroud)