.net 如何显示所有小数点?

6rqinv9w  于 2022-12-14  发布在  .NET
关注(0)|答案(2)|浏览(196)

我目前正在尝试:

double keyTimes = 789789347928325 * Math.Pi
Console.WriteLine(keyTimes);

它给了我:2.4811964133351E+15
我需要它给予我一个项目的完整位数,我如何才能实现这一点?我想这样的东西:2.4811964133351468979725207509245720957294570275973459709345787430等等。

ukqbszuj

ukqbszuj1#

double最多可以保存17位数,因此您应该使用decimal,它是具有最高精度(28-29位数)的浮点数值类型。由于Math.PI常量也是double,因此您需要定义自己的:

var pi = 3.14159265358979323846264338327m;
var keyTimes = 789789347928325 * pi;
// output 2481196413335099.0078141712097

为了得到更好的结果,你可以尝试找到一个外部库。例如,有一个BigDecimal nuget,但它很久没有更新了。

hmmo2u0o

hmmo2u0o2#

获取所需数量的PI位数,例如
https://github.com/eneko/Pi/blob/master/one-million.txt(一百万)
https://stuff.mit.edu/afs/sipb/contrib/pi/(十亿)
将PI转换为BigInteger,进行算术运算,恢复小数点:

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);

输出:

2481196413335099.0078141712096700227201776435541531843170785955041765369811708253654976044892515801198900164883582675

Fiddle

相关问题