如何更改Math.PI

时间:2018-08-16 00:53:42

标签: java math

我是科学应用程序的首席开发人员。从会计上我们有一个新的要求,即pi = 3.14。但是在JAVA Math.PI = 3.14159 ...中,我尝试通过反射对其进行更改。但是似乎不起作用,我们称为 still 的某些库使用pi的旧值。例如,当我们对1 /(x * x + 1)进行积分时,结果仍然是3.14159 ...而不是3.14。我已经尝试了所有方法...请问如何更改Math.PI ???

编辑:这是我们公司会计准则的摘录。

  

出于合规性原因,所有数字常数必须精确到小数点后两位数,并且所有计算都必须相应地进行并且与此精度水平相符。

我特别询问了pi,他们说是的,pi必须精确到两位十进制数字...

2 个答案:

答案 0 :(得分:20)

最简单的答案是:您不能使用反射或任何其他方式更改Math.PI

Math.PI常量是编译时常量,正如JLS解释的(JLS 17.5.3):

  

“如果在字段声明中将final字段初始化为常量表达式(§15.28),则可能不会观察到对final字段的更改,因为在编译时会替换该final字段的用法时间与常量表达式的值。”

如果您需要一个与标准值不同的PI常量,则需要在自己的类或接口中定义自己的常量。


不幸的是,对于发布此法令的人们来说,定义自己的PI可能还不够……因为将实现标准和第三方数学库,以使用pi,e等在数学上正确的值。找到/修复所有这些问题基本上需要实现自己的JVM。

但这是一个“建设性”的解决方案。完全不支持计算器中的PI常量。而是支持pi()函数...,该函数返回完整的精度值。如果是“他们”对象,则使pi()返回的值取决于命令行选项或其他内容。

或者,只做明智的事情,而忽略这个疯狂的法令。例如,您说该命令来自公司范围内的会计软件标准。您正在编写一个科学应用程序,因此您可能会争辩说“会计规则”不适用 1


1-当然,任何具有重大科学或数学知识的人都会告诉你,他们不应该申请。

答案 1 :(得分:-6)

如果将Math.PI定义为Double,则可以使用反射来更改它。