我很清楚Double只有很多精度,但如果可能的话,我们仍然应该尝试获得高精度。所以我当然不希望在官方的.NET 4系统库中看到这一点。
// Summary:
// Represents the ratio of the circumference of a circle to its diameter,
// specified by the constant, π.
public const double PI = 3.14159;
为什么只有6位数?使用准确的值会很容易且免费。我不是在.NET中做科学工作,但我确信其他人都做了,而且当Pi不准确时,他们会感到惊讶。同样适用于E.
编辑:这是为了反映Visual Studio中的常量。见followup question
答案 0 :(得分:15)
从.NET 4.0参考源中的Math.cs复制并粘贴:
public const double PI = 3.14159265358979323846;
public const double E = 2.7182818284590452354;
不知道你在看什么。
从后续问题进行逆向工程,您查看了使用“转到定义”上下文菜单项时从程序集元数据创建的自动生成的文本。是的,生成此文本的代码似乎使用公共双常量值的默认%f格式。非常罕见的btw,不很多公共常量在.NET框架中是双重的。您可以在connect.microsoft.com上提交反馈报告
答案 1 :(得分:4)
快速测试显示Console.WriteLine(Math.PI)
输出3.14159265358979
所以这怎么可能是真的?你是说ToString()
通过魔法添加额外数字吗?
答案 2 :(得分:3)
问题是所有元数据常量都是使用默认的printf()行为打印的,这种行为是使用%f最终会截断你在常量上按VS中的F12时所看到的内容。请参阅此问题Are Double constants truncated for display in VS?
答案 3 :(得分:1)
您可以使用Pi = Math.acos(-1)
。
更严重的是,除非你真的知道自己在做什么,否则不要在.NET中进行数学运算。