我正在编写C#应用程序,我希望PI的值为float,而不是double。目前我将值从double转换为float,最后在整个代码中使用丑陋(浮动)Math.PI。
是否有内置PI函数返回浮点数?
编辑:为什么要使用浮点而不是双精度?我正在使用很多浮点数,并且处理大量数字,因此较小的数据==更适合缓存==更好的性能。
答案 0 :(得分:7)
据我所知。只有你自己的常数:
const float PI = (float)Math.PI;
答案 1 :(得分:4)
关于定义浮点常量的答案都是正确的。
但我很好奇为什么你需要更低的精度?
通常的方法是以更高的精度执行计算并投出最终答案,而不是投射中间人(这可能导致错误累积,具体取决于您正在执行的计算类型)。
答案 2 :(得分:2)
没有这样的内置功能。</ p>
如果您在很多情况下从double
(Math.PI
)投射到float
,请将值存储为浮动某处。因为类中的static / const成员非常合适,如果类使用了很多值。
另外,你可以在你自己的对象中使用的其他地方创建一个对象,其中包含pi的变量(作为一个浮点数)是static
。
答案 3 :(得分:1)
如果你想摆脱(float)Math.PI cast
,你为什么不写一个包装类和属性?
public class MathEx {
public static float PI {
get {
return (float)Math.PI;
}
}
}
答案 4 :(得分:1)
从.NET Core 2.0(.NET Standard 2.1)开始,上层Microsoft通过将默认Math
常量和方法包含在 {{ MathF
命名空间的1}} 类,其所有形式和返回类型均为浮点数。
用法示例:
System
有关更多信息,请参见documentation on MSDN有关using System;
class Class
{
public void Method()
{
float floatPi = MathF.PI;
float floatSin = MathF.Sin(floatPi * 2);
}
}
类型的信息。
答案 5 :(得分:0)
实际上在XNA框架中有MathHelper.Pi Field,但我打赌你不需要任何其他额外的dll只需一次成本 - 更好地在你自己的帮助器中定义一个。 BTW,几乎总是双倍应默认选择。
答案 6 :(得分:-3)
试试这个:
const float Mypi = 3.14159265358979f;