如何显示所有小数点?

How do I show all decimal points?

提问人:Yen 提问时间:12/10/2022 最后编辑:Heretic MonkeyYen 更新时间:12/10/2022 访问量:73

问:

我目前正在尝试:

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

它给了我:2.4811964133351E+15

我需要它为我提供项目的完整位数,我怎样才能实现这一点? 我想要这样的东西:等等。2.4811964133351468979725207509245720957294570275973459709345787430

C# .NET Precision Pi

评论

6赞 Jon Skeet 12/10/2022
提示:您认为能够保持多少位有效数字,您有什么证据?您实际希望看到多少位数字?(您认为将 pi 乘以 789789347928325 的“完全准确”结果中会有多少位数字?double
1赞 President James K. Polk 12/10/2022
Pi 不能用任意数量的十进制数字、位或任何其他基数精确表示。
1赞 Roman Ryzhiy 12/10/2022
stackoverflow.com/questions/5473136/......
1赞 radoslawik 12/10/2022
此外,是一个常数,小数点后有 16 位数字Math.PI
2赞 Heretic Monkey 12/10/2022
这回答了你的问题吗?如何在 C# 中使用循环计算 pi 到 N 位数

答:

0赞 radoslawik 12/10/2022 #1

double最多可以容纳 17 位数字,因此应使用精度最高(28-29 位)的浮点数值类型。由于常量也是 a,因此您需要定义自己的常量:decimalMath.PIdouble

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

为了获得更好的结果,您可以尝试找到一个外部库。例如,有一个 BigDecimal nuget,但它已经更新很长时间了。

0赞 Dmitry Bychenko 12/10/2022 #2

获取任意数量的 PI 数字,例如

https://github.com/eneko/Pi/blob/master/one-million.txt(100万)

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

小提琴