using System.Numerics;
...
string piStr = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
BigInteger pi = BigInteger.Parse(piStr.Replace(".", ""));
BigInteger value = pi * 789789347928325;
string result = value.ToString().Insert(16, ".");
Console.WriteLine(result);
2条答案
按热度按时间ukqbszuj1#
double
最多可以保存17位数,因此您应该使用decimal
,它是具有最高精度(28-29位数)的浮点数值类型。由于Math.PI
常量也是double
,因此您需要定义自己的:为了得到更好的结果,你可以尝试找到一个外部库。例如,有一个BigDecimal nuget,但它很久没有更新了。
hmmo2u0o2#
获取所需数量的PI位数,例如
https://github.com/eneko/Pi/blob/master/one-million.txt(一百万)
https://stuff.mit.edu/afs/sipb/contrib/pi/(十亿)
将PI转换为
BigInteger
,进行算术运算,恢复小数点:输出:
Fiddle